【问题标题】:SQL Server 2005 bulk insert binary typesSQL Server 2005 大容量插入二进制类型
【发布时间】:2011-01-05 02:19:30
【问题描述】:

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

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

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

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

数据示例:

 1,0x00000000000000000BB8,0,142,0x434F4E534E554D424552202020202020040006000600202000000000202000000000000000008000422020202020202020202020202020202020000000000000000000000000000000000000202000000020000000000000000000000000000000000000000000000000000000000200020000000000000004000000E09304006B8016000600FFFFFFFF0B00010007004633303030002E81FFFF1C00FFFFFFFF04001E00  PRE>

谢谢。

【问题讨论】:

  • 当对数据文件和从 BCP 生成的格式文件使用批量插入时,它运行良好。它对我来说已经足够好了。感谢所有帮助过我的人。

标签: sql-server sql-server-2005 bulkinsert


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多