In SQL Server 2016 they added a sweet new featured to allow you to compress input strings and binaries. The new COMPRESS function allows the field or literal value passed in to the function to be compressed in GZip format.
The COMPRESS function will take in an input and compress it using a GZip compression. The output from the function is a VARBINARY datatype. You can display that in a SQL Server Management window or store it in a table with a VARBINARY(MAX) field. To use the COMPRESS function, you need to pass in either VARCHAR, BINARY, VARBINARY, or CHAR datatypes.
How To Use The COMPRESS Function
For this example, I’m going to put the data in to a table variable. If you have a permanent table structure, you can use that instead.
DECLARE @InsertTest TABLE (AnimalName VARCHAR(50), AnimalStats VARBINARY(MAX)) INSERT INTO @InsertTest VALUES ('Dog', COMPRESS('Height: 26 inches; Weight: 20 pounds; Color: Brown')) SELECT * FROM @InsertTest
If you’re looking to compress some data just inside SQL Server Management Studio, you can just do this:
SELECT COMPRESS('this is the data I want to compress') AS CompressedData
How To Decompress Your Data
So now that you’ve compressed data, how to do you decompress it? As you guessed, SQL Server also added a DECOMPRESS function. It’s just as simple as the COMPRESS function, just with one little twist. The DECOMPRESS function only returns the datatype VARBINARY(MAX). You will have to cast it in to whatever you want. Here’s an example using the same script as we used above:
DECLARE @InsertTest TABLE (AnimalName VARCHAR(50), AnimalStats VARBINARY(MAX)) INSERT INTO @InsertTest VALUES ('Dog', COMPRESS('Height: 26 inches; Weight: 20 pounds; Color: Brown')) SELECT * FROM @InsertTest SELECT CAST(DECOMPRESS(AnimalStats) AS VARCHAR(250)) AS DecompressedAnimalStats FROM @InsertTest
You can see above that I just wrapped the DECOMPRESS function with a CAST function. It’s that simple to get it in the format that you want.
Something To Keep In Mind: Compressed data can’t be indexed! Sorry!
Something Else To Keep In Mind: If the goal is to compress all the data in a row/table/data page/or index, SQL Server (as of 2016) now supports this using a different built-in method. So you don’t have to do it all manually.