You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将用于BLOB解压缩的C#代码使用T-SQL(SQL Server)复现

实现方案

功能拆解

对应你给出的C#代码,核心逻辑分为3步:

  • 丢弃varbinary类型输入的前4个字节,截取剩余部分
  • 对截取后的二进制内容执行Deflate算法解压
  • 将解压后的二进制数据按照windows-1251编码转换为字符串

T-SQL 实现说明

你现有代码里的循环完全没有必要,SQL可以直接用内置函数实现字节截取,不需要逐字节遍历。根据你使用的SQL Server版本不同,有两种实现方案:

方案1:使用内置函数(适用SQL Server 2016及以上版本)

SQL Server 2016开始新增的DECOMPRESS内置函数支持Deflate/zlib格式解压,搭配编码转换即可实现需求,完整代码如下:

DECLARE @sqlBinary varbinary(max) -- 这里替换为你实际的BLOB字段/变量
DECLARE @trimmedBinary varbinary(max)
DECLARE @decompressedBinary varbinary(max)
DECLARE @result varchar(max)

-- 第一步:跳过前4个字节,截取剩余内容
SET @trimmedBinary = SUBSTRING(@sqlBinary, 5, DATALENGTH(@sqlBinary) - 4)

-- 第二步:执行Deflate解压
SET @decompressedBinary = DECOMPRESS(@trimmedBinary)

-- 第三步:按照windows-1251编码(对应SQL代码页1251)转字符串
SET @result = CAST(@decompressedBinary AS varchar(max)) COLLATE SQL_Latin1_General_CP1251_CI_AS

-- 输出结果
SELECT @result AS BlobConvertedText

注意:如果解压后内容乱码,说明你存储的Deflate流没有带zlib头,内置DECOMPRESS无法识别,需要使用方案2的CLR函数实现。

方案2:CLR自定义函数(兼容所有版本,适配无zlib头的Deflate流)

如果内置函数不兼容你的BLOB格式,可以按照C#逻辑编写CLR函数部署到SQL Server中,直接复用你现有的C#代码即可,部署后可以直接在T-SQL中调用该函数处理BLOB字段。

内容的提问来源于stack exchange,提问作者fini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:06:03