2009-06-29 149 views
3

我们有一个用于用户设置的SQL Server表。最初这些设置是域对象,它们已经被序列化为表格中的XML,但我们最近开始将它们作为二进制序列化。手动插入varbinary数据到SQL Server

但是,作为我们部署过程的一部分,我们静态地为我们的用户预先填充了预定义的设置表。最初,这很简单,只需从定制数据库复制XML并将其粘贴到构建数据库后运行的INSERT语句中即可。但是,由于我们已经将设置存储为二进制数据,因此我们无法使其工作。

我们如何从SQL Server中的varbinary列中提取二进制数据并将其粘贴到静态INSERT脚本中?我们只想为此使用SQL,我们不想使用任何实用程序。

由于提前, 杰里米

+0

感谢所有响应时被添加,但我们决定只需使用SQL批量复制实用程序将二进制数据作为.dat文件进行打包即可。 – 2009-06-30 12:22:42

回答

1

我相信你行与像查询分析器/管理CHINESE Studio工具?

您可以复制并粘贴select语句返回的二进制值(确保您返回的数据充足),并在脚本中以“0x”作为前缀。

+0

嗨大卫, 感谢您的建议。我们实际上已经尝试过,但是我们不断地在字符串中插入附加的尾随0。这导致我们试图反序列化的结果对象无效。 – 2009-06-30 12:21:52

+0

你确定它是一个varbinary而不是二进制列吗? – 2009-06-30 13:02:34

3

您可能会发现更容易储存在配置表中的模板值的地方,然后将其读入一个变量,并使用该变量来填补你的刀片:

DECLARE @v varbinary(1000) 
SELECT @v = templatesettings from configtable 

INSERT INTO usertable VALUES(name, @v, ....) 
0

如果我理解正确的话,你想从您的数据生成一个静态脚本。如果是这样,请考虑对连接字符串的旧数据执行查询以形成脚本中需要的SQL语句。

首先,找出你想让脚本结果看起来像什么。请注意,您需要将您要插入的值视为常量。例如:

INSERT INTO NewTable VALUES 'value1', 'value2' 

现在,创建旧的数据,只是让你将要移动的值,这样的查询:

SELECT value1, value2 
FROM OldTable 

最后,更新您的查询的SELECT语句产生在输出你以前的形式单一的连接字符串定义:

SELECT 'INSERT INTO NewTable VALUES ''' + value1 + ''', ''' + value2 + '''' 
FROM OldTable 

这是一个做生意的令人费解的方式,但它能够完成任务。你需要密切关注细节。它将允许一个小的(但令人困惑的)查询来快速输出非常大量的静态DML语句。

2

从SQL Server 2008开始,您可以使用任务>生成脚本并选择包含数据。这为您提供了表中所有行的INSERT语句,您可以根据需要进行修改。

Here's the steps for SQL 2008。请注意,SQL 2008 R2中的“脚本数据”选项被称为“脚本数据类型”,而不是“脚本数据”。