我们有一个用于用户设置的SQL Server表。最初的设置是域对象,它已被序列化为XML,但我们最近开始将它们序列化为二进制文件。
但是,作为部署过程的一部分,我们会使用我们用户的预定义设置静态预填充表格。最初,这就像从自定义数据库中复制XML并将其粘贴到构建数据库之后运行的INSERT语句一样简单。但是,由于我们已将设置存储为二进制数据,因此我们无法使其工作。
我们如何从SQL Server中的varbinary列中提取二进制数据并将其粘贴到静态INSERT脚本中?我们只想使用SQL,我们不想使用任何实用程序。
提前致谢, 杰里米
答案 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