手动将varbinary数据插入SQL Server

时间:2009-06-29 14:28:44

标签: sql sql-server

我们有一个用于用户设置的SQL Server表。最初的设置是域对象,它已被序列化为XML,但我们最近开始将它们序列化为二进制文件。

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

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

提前致谢, 杰里米

5 个答案:

答案 0 :(得分:4)

您可能会发现将模板值存储在某个配置表中更容易,然后将其读入变量并使用该变量填充插入内容:

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我认为你可以使用像Query Analyzer / Mangement Studio这样的工具吗?

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

答案 3 :(得分:0)

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

首先,弄清楚你想要的脚本结果是什么样的。请注意,您需要将要插入的值视为常量。例如:

INSERT INTO NewTable VALUES 'value1', 'value2'

现在,为刚刚获取您想要移动的值的旧数据创建一个查询,如下所示:

SELECT value1, value2
FROM OldTable

最后,更新查询的SELECT语句,以前面定义的输出形式生成单个连接字符串:

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

这是一种令人费解的经营方式,但它完成了工作。你需要密切关注细节。它将允许一个小的(但令人困惑的)查询快速输出大量的静态DML语句。

答案 4 :(得分:0)

David M建议使用0x前缀,但我必须在我尝试插入的varbinary数据末尾添加一个额外的0。

请参阅下面的stackoverflow条目,以查看在转换为varbinary或保存到varbinary列时添加的附加0的问题

Insert hex string value to sql server image field is appending extra 0