SQL查询将文本数据存储在Varbinary(最大)

时间:2012-01-30 16:48:17

标签: .net sql-server tsql text varbinary

有没有办法在SQL Server中创建varbinary接受文本数据?

这是我的情况。我有一个相当大量的XML,我计划以“压缩”格式存储。 (这意味着一个Varbinary。)

但是,当我调试时,我希望能够翻转配置开关并以纯文本格式存储,以便我可以从数据库进行故障排除(即没有客户端应用程序需要解压缩)。

是否可以将普通文本插入varbinary(max)?

2 个答案:

答案 0 :(得分:3)

  

是否可以将普通文本插入varbinary(max)?

,只需确定您要存储的内容,以便了解如何将其恢复。这可能会对此有所启发:

-- setup test table
declare @test table (
    data varbinary(max) not null,
    datatype varchar(10) not null
)

-- insert varchar
insert into @test (data, datatype) select cast('asdf' as varbinary(max)), 'varchar'
-- insert nvarchar
insert into @test (data, datatype) select cast(N'asdf' as varbinary(max)), 'nvarchar'

-- see the results
select data, datatype from @test
select cast(data as varchar(max)) as data_to_varchar, datatype from @test
select cast(data as nvarchar(max)) as data_to_nvarchar, datatype from @test

<强>更新 当然,所有这些都假定您不希望利用SQL Server的本机XML数据类型的表达能力。 XML数据类型似乎也相当有效地存储其内容。根据datalength(),在我的数据库中,我经常看到它只有一小块varchar的大小的一半。这可能不是那么科学,当然还有YMMV。

答案 1 :(得分:1)

您可以使用this answer将字符串转换为字节数组,并将结果插入varbinary(max)列。我们的想法是使用BinaryFormatterMemoryStream来序列化字符串,从内存流中获取生成的字节数组,并将其写入varbinary(max)列。