Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从SQL Server检索压缩的GZip信息_Sql_Sql Server_Tsql_Sql Server 2008 R2 - Fatal编程技术网

从SQL Server检索压缩的GZip信息

从SQL Server检索压缩的GZip信息,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我有一个存储压缩GZip文件内容的表。不确定原始信息是XML还是CSV还是什么。我没有原始资料。PulledContent列是varbinary,看起来像这样0x1F8B080000000000004006553C18E9B3010BD57EA3F706C0F2B63… 我怎样才能将这些信息转换成人类可读的东西 我想解决办法可能就在这里: 但是当我尝试这样做时:选择CONVERT(VARCHAR(1000),PulledContent,2) 它只是给了我一个稍微不同的数字和字母字符串,像这样1f

我有一个存储压缩GZip文件内容的表。不确定原始信息是XML还是CSV还是什么。我没有原始资料。PulledContent列是varbinary,看起来像这样
0x1F8B080000000000004006553C18E9B3010BD57EA3F706C0F2B63…

我怎样才能将这些信息转换成人类可读的东西

我想解决办法可能就在这里:

但是当我尝试这样做时:
选择CONVERT(VARCHAR(1000),PulledContent,2)

它只是给了我一个稍微不同的数字和字母字符串,像这样
1f8b0800000000004006553c18e9b310bd57ea3f70…


我缺少什么?

从“PulledContent”列返回的数据是二进制GZip压缩格式。为了将此二进制数据转换为人类可读的格式,您需要执行以下任务

1) 使用适当的库解压缩二进制数据。如果您在windows环境中,则可以使用.net类执行此任务

2) 将二进制数据转换为字符串。您可以通过使用.net编码类来实现这一点

string data = Encoding.Default.GetString(bytes); 

享受吧

使用最优秀的:

如何处理解压缩的八位字节的
字节[]
,取决于它是什么。如果您知道它是文本,您可以简单地通过以下内容运行它

Encoding.Default.GetString( bytes ) ;
但您需要知道底层编码是什么


编辑说明:DotNetZip过去住在Codeplex。Codeplex已经关闭。旧档案馆仍然保存着。代码似乎已迁移到Github:

  • 。看起来是原作者的回购协议
  • 。这看起来是当前维护的版本。它还打包了一个可通过Nuget在


要解压缩T-SQL中的
VARBINARY
值(无论是在SSMS还是SQL脚本等中),可以使用SQLCLR函数通过简单的
SELECT
语句进行转换。您将使用@Doug提到的
GzipStream

但是,如果您不想编写任何代码来获取此功能,可以在SQLCLR库的免费版本中找到它(我是该库的作者,而且此函数是免费的)。例如:

选择SQL#.Util_GUnzip(PulledContent)
来自SchemaName.TableName
其中SomeField=某物;
这也将返回一个
VARBINARY
值,但它将是未压缩的值。在这一点上,您可以尝试将其转换为各种形式,以了解它的真正含义。二进制文件仍然是二进制文件,但纯文本应至少部分可读(如果排序规则是正确的编码,则完全可读):

选择CONVERT(VARCHAR(MAX),SQL#.Util_GUnzip(PulledContent))
来自SchemaName.TableName
其中SomeField=某物;
或:

选择CONVERT(NVARCHAR(MAX),SQL#.Util_GUnzip(PulledContent))
来自SchemaName.TableName
其中SomeField=某物;

我还应该补充一点,我无权访问Visual Studio或安装任何新程序。严重限制,我知道。我希望有一种只使用SSM的方法。@pteridoid您不需要Visual Studio或任何新程序。您已经安装了csc.exe C#编译器。您可以编译SQLCLR程序集并在目标系统上部署它们。
Encoding.Default.GetString( bytes ) ;