Sample code for 30+ languages & platforms
SQL Server

Compress and Decompress Hex String

See more Compression Examples

Imagine we have data represented as a hex string. This example demonstrates how to decode, compress, and re-encode to a smaller hex string representing the compressed data. An even better choice is to re-encode to a more compact encoding such as base64.

Note: This example requires Chilkat v9.5.0.66 or greater.

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @success int
    SELECT @success = 0

    -- This example assumes the Chilkat API to have been previously unlocked.
    -- See Global Unlock Sample for sample code.

    DECLARE @strHex nvarchar(4000)
    SELECT @strHex = '54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A0D0A'

    DECLARE @compress int
    EXEC @hr = sp_OACreate 'Chilkat.Compression', @compress OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    EXEC sp_OASetProperty @compress, 'Algorithm', 'deflate'

    DECLARE @binDat int
    EXEC @hr = sp_OACreate 'Chilkat.BinData', @binDat OUT

    -- Load the hex string into a BinData object.
    -- This decodes the hexidecimal. The decoded bytes will be contained in the BinData.
    EXEC sp_OAMethod @binDat, 'AppendEncoded', @success OUT, @strHex, 'hex'

    -- Compress the BinData.
    EXEC sp_OAMethod @compress, 'CompressBd', @success OUT, @binDat

    -- Get the compressed data in hex format:
    DECLARE @compressedHex nvarchar(4000)
    EXEC sp_OAMethod @binDat, 'GetEncoded', @compressedHex OUT, 'hex'

    PRINT 'compressed hex:'

    PRINT @compressedHex

    -- The compressed hex is: 0BC94855282CCD4CCE56482ACA2FCF5348CBAF50C82ACD2D484D51C82F4B2D522801CAE72456552AA4E4A7EBF172850C61E5BC5C00

    -- Even better, get the compressed data in base64 format:
    -- (base64url and modbase64 are other valid choices...)
    DECLARE @compressedBase64 nvarchar(4000)
    EXEC sp_OAMethod @binDat, 'GetEncoded', @compressedBase64 OUT, 'base64'

    PRINT 'compressed base64:'

    PRINT @compressedBase64

    -- The compressed base64 is: C8lIVSgszUzOVkgqyi/PU0jLr1DIKs0tSE1RyC9LLVIoAcrnJFZVKqTkp+vxcoUMYeW8XAA=

    -- Now decompress:
    EXEC sp_OAMethod @binDat, 'Clear', @success OUT
    EXEC sp_OAMethod @binDat, 'AppendEncoded', @success OUT, @compressedHex, 'hex'
    EXEC sp_OAMethod @compress, 'DecompressBd', @success OUT, @binDat

    DECLARE @decompressedHex nvarchar(4000)
    EXEC sp_OAMethod @binDat, 'GetEncoded', @decompressedHex OUT, 'hex'

    PRINT 'decompressed hex:'

    PRINT @decompressedHex

    -- The output is the original hex string:
    -- 54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A54686520717569636B2062726F776E20666F78206A756D706564206F76657220746865206C617A7920646F672E0D0A0D0A

    EXEC @hr = sp_OADestroy @compress
    EXEC @hr = sp_OADestroy @binDat


END
GO