SQL Server 2005批量插入二进制类型

Nim*_*ory 2 sql-server bulkinsert sql-server-2005

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

smallint, binary(10), smallint, smallint, varbinary(max)

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

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

数据示例:

1,0x00000000000000000BB8,0,142,0x434F4E534E554D424552202020202020040006000600202000000000202000000000000000008000422020202020202020202020202020202020000000000000000000000000000000000000202000000020000000000000000000000000000000000000000000000000000000000200020000000000000004000000E09304006B8016000600FFFFFFFF0B00010007004633303030002E81FFFF1C00FFFFFFFF04001E00

谢谢.

Eri*_*ikE 5

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

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

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