手动将 varbinary 数据插入 SQL Server

6
我们有一个用户设置的SQL Server表格。最开始,这些设置是域对象,以XML格式序列化到表格中,但我们最近改成了二进制序列化。
然而,在部署过程中,我们需要在表格中静态地预置一些预定义的用户设置。最初,这很简单,只需从定制数据库复制XML并将其粘贴到INSERT语句中,然后在构建数据库后运行该语句。但是,自从我们把设置存储为二进制数据以来,我们无法让它工作。
我们该如何从SQL Server的varbinary列中提取二进制数据并将其粘贴到静态INSERT脚本中?我们只想使用SQL来完成,不想使用任何工具。
先谢谢了! Jeremy

感谢所有的回复,但我们决定使用SQL批量复制实用程序将二进制数据部署为.dat文件。 - Jeremy Jarrell
5个回答

4

您可以更轻松地将模板值存储在某个配置表中,然后将其读入变量并使用该变量填充插入语句:

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

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

3

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

这是SQL 2008的步骤。请注意,SQL 2008 R2中的“Script Data”选项称为“Types of data to script”。


谢谢,这是一个很好的发现。 - NoAlias
这是最好的答案。如果我手动插入,我发现在我的varbinary列中出现了一些额外的符号。例如0xFblablabla变成了0x0Fblablabla。这个方法解决了这个问题!我只想补充一下,这个链接解释了如何启用数据插入脚本生成:https://dzone.com/articles/generate-database-scripts-with-data-in-sql-server - Jurijs Kastanovs

1

我想你应该对像Query Analyzer/Mangement Studio这样的工具很熟悉吧?

你可以直接复制并粘贴由select语句返回的二进制值(确保你返回了足够的数据),然后在你的脚本中加上"0x"前缀。


嗨David,感谢您的建议。我们实际上尝试过,但是我们不断地在字符串中插入额外的尾随0。这导致我们尝试反序列化的结果对象无效。 - Jeremy Jarrell
你确定它是 varbinary 而不是 binary 列吗? - David M

0

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

首先,确定您希望脚本化结果看起来像什么。请注意,您需要将插入的值视为常量。例如:

INSERT INTO NewTable VALUES 'value1', 'value2'

现在,为旧数据创建一个查询,只获取你想要移动的值,就像这样:
SELECT value1, value2
FROM OldTable

最后,更新你的查询SELECT语句以产生一个单一的连接字符串,其形式与你之前定义的输出相同:
SELECT 'INSERT INTO NewTable VALUES ''' + value1 + ''', ''' + value2 + ''''
FROM OldTable

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接