2012-01-30 58 views
3

有没有办法在SQL Server中创建varbinary接受文本数据?用于将文本数据存储在Varbinary中的SQL查询(最大)

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

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

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

+1

'select cast('asdf'as varbinary(max))' 'select cast(varchar(max)的cast('asdf')varchar(30))' – 2012-01-30 16:51:43

+0

存储大于2 MB的对象SQL服务器表是一种不好的技术,它总是(在我的实践中)与未来的问题联系在一起。我向你推荐,如果你打算存储更大的对象来阅读“启用FileStream的数据库” - 很快:你正在使用varbinary(max),但对文件的大小没有限制,它存储在你的硬盘上。 – gotqn 2012-01-30 18:03:18

+0

@Joro - 感谢您的评论。我之前查看过FileStream。但是一列数据类型FileStream使得它不能镜像你的数据库。这不是我愿意放弃的功能。 – Vaccano 2012-01-30 23:26:35

回答

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 

UPDATE: 所有这些假设,当然,前提是你不想使用SQL Server的本机XML数据类型的表现力。 XML数据类型似乎也相当有效地存储其内容。根据datalength(),在我的数据库中,我经常看到它只有一个相等的varchar字符串的一半大小。这可能不是那么科学,当然,YMMV。

+0

>>只有相同字符串大小的一半<<如果是这种情况,我不会压缩我的数据。但是,我将一个示例XML字符串转储到两个测试表中,并且使用了2,055字节的XML数据类型和使用2,135(仅80字节差异)的varchar(max)。有什么配置我需要做,使其工作? – Vaccano 2012-01-30 18:04:41

+0

这可能与我的原始文本中的空白数量有很大关系,因为它将其转换为本机XML时将被删除:http://msdn.microsoft.com/en-us/library/ms190965.aspx – 2012-01-30 20:17:45

+0

您可能在这里也可以找到一些有趣的想法:http://stackoverflow.com/questions/1089150/net-compression-of-xml-to-store-in-sql-server-database – 2012-01-30 20:37:54

1

您可以使用this answer将字符串转换为字节数组,然后将结果插入到varbinary(max)列中。我们的想法是使用BinaryFormatterMemoryStream来串行化字符串,从内存流中收集得到的字节数组,并将其写入varbinary(max)列。

相关问题