2

我有一个格式如下的表格:

smallint、binary(10)、smallint、smallint、varbinary(max)

我还有一个 csv 文件,由我们的一个进程从表中的数据生成,其中二进制数据导出为十六进制数据。
我尝试生成有效但非常慢的 INSERT INTO 语句。
我厌倦了 BULK INSERT 但它失败了,我怀疑这是因为二进制数据。

任何人都知道我如何使用 BULK INSERT (或类似的东西)插入包含二进制数据的大量数据?

数据示例:

1,0x00000000000000000BB8,0,142,0x434F4E534E554D424552202020202020040006000600202000000000202000000000000000008000422020202020202020202020202020202020000000000000000000000000000000000000202000000020000000000000000000000000000000000000000000000000000000000200020000000000000004000000E09304006B8016000600FFFFFFFF0B00010007004633303030002E81FFFF1C00FFFFFFFF04001E00

谢谢。

4

1 回答 1

5

我敢打赌,问题在于 0x434F4E... 被视为要插入的实际字节(0x3078343334463445),而不是十六进制扩展。('0' = 0x30, 'x' = 0x78, '4' = 0x34 等等。)截断会发生,因为十六进制每个值有两个字符,所以它试图插入一个长度是你的两倍的字符串想。

如果您查看 BULK INSERT 的选项并发现无法告诉它将十六进制解释为二进制,我建议为此使用 SSIS。我没有从 SSIS 批量加载二进制值的实际经验,但毫无疑问它可以做到,而且速度很快。

我想总是有可能输出二进制值的实际字节而不是它们的十六进制表示,但是如果您使用分隔符,您会遇到问题,因为分隔符可能是其中的字节之一一个二进制值。这正是混合文本和二进制数据的问题。您可以通过使用固定长度的列导入来做到这一点,并使用 BULK INSERT 的特殊扩展语法来定义列及其数据类型。

于 2010-01-16T18:48:02.170 回答