2010-01-14 64 views
2

我有以下格式的表:SQL Server 2005的批量插入二進制類型

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

我也是其中的二進制數據導出爲我們的流程的一個具有從表中的數據生成的csv文件十六進制數據。
我試圖生成INSERT INTO語句工作,但很慢..
我累BULK INSERT,但它是失敗的,我懷疑這是因爲二進制數據。

任何人都知道我該如何使用BULK INSERT(或類似的東西)來插入包含二進制數據的大量數據?

的數據的一個例子:

1,0x00000000000000000BB8,0,142,0x434F4E534E554D424552202020202020040006000600202000000000202000000000000000008000422020202020202020202020202020202020000000000000000000000000000000000000202000000020000000000000000000000000000000000000000000000000000000000200020000000000000004000000E09304006B8016000600FFFFFFFF0B00010007004633303030002E81FFFF1C00FFFFFFFF04001E00

感謝。

回答

0

當使用BCP生成的數據文件和格式文件的批量插入時,它運行良好。它對我來說足夠好。
感謝所有幫助我的人。

0

我累了BULK INSERT,但它是失敗的,我懷疑這是因爲二進制數據。

我懷疑這是錯誤的。你收到什麼錯誤信息?

+0

我越來越: '批量加載數據轉換錯誤(截斷)爲第1行,第2列(composite_key).' – 2010-01-14 14:36:04

+0

截斷意味着你正在努力字節太多擠入列 – 2010-01-14 14:58:34

+0

Thougt如此。但在一個插入語句的作品..我做錯了什麼? (我已經添加了一個我想要插入的行的示例..) – 2010-01-14 15:01:18

3

我敢打賭,問題是0x434F4E ...被視爲要插入的實際字節(0x3078343334463445),而不是作爲十六進制擴展。 ('0'= 0x30,'x'= 0x78,'4'= 0x34等)。截斷會發生,因爲十六進制每個值有兩個字符,所以它試圖插入一個字符串長度的一倍想。

如果您查看BULK INSERT的選項並找不到解釋十六進制爲二進制的方式,我建議使用SSIS。我沒有從SSIS批量加載二進制值的實際經驗,但無疑它可以做到,而且速度會很快。

我想總是有輸出二進制值的實際字節而不是十六進制表示的可能性,但是如果你使用分隔符,你會碰到問題,因爲分隔符可能是一個的二進制值中的字節。這正是混合文本和二進制數據的問題。您可以通過使用固定長度的列導入來完成此操作,並使用BULK INSERT的特殊擴展語法來定義列及其數據類型。

+0

+1感謝您的幫助 – 2010-01-17 10:11:43