Listing 1: The Compression Function using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.IO; using System.IO.Compression; public partial class UserDefinedFunctions { // Set the function characteristics. [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic=true, DataAccess=DataAccessKind.None)] // BEGIN CALLOUT A public static SqlBytes fn_compress(SqlBytes blob) // END CALLOUT A { if (blob.IsNull) return blob; // BEGIN CALLOUT B // Retrieve the BLOB's data. byte[] blobData = blob.Buffer; // END CALLOUT B // BEGIN CALLOUT C // Prepare for compression. MemoryStream compressedData = new MemoryStream(); DeflateStream compressor = new DeflateStream(compressedData, CompressionMode.Compress, true); // Write the uncompressed data using a DeflateStream compressor. compressor.Write(blobData, 0, blobData.Length); // Close the compressor to allow all the compressed bytes to be written. compressor.Flush(); compressor.Close(); compressor = null; // END CALLOUT C // Return the compressed blob. return new SqlBytes(compressedData); } };