2017-06-22 128 views
0

我目前想BCP出的Sybase ASE數據庫(15.7)到BCP到SQL Server(2016)。所有BCP任務都在Windows環境中運行。BCP的Sybase ASE到SQL Server - 自定義字段分隔符

正如我與回車換行符記錄,我需要指定一個自定義記錄終止,以解決這個問題。我希望使用的終結者是「〜\ t \ t \ t \ t〜\ r \ n」。爲了便於閱讀,我添加了CRLF字符以防我需要打開文件。外出時的命令如下:

bcp database..table out table.dat -Sserver -Uuser -Ppassword -c -t "|\t\t\t\t\t|" -r "~\t\t\t\t\t~\r\n" 

當我回到BCP到SQL Server中,我得到一個「字符串數據,右截斷錯誤」。命令如下:

bcp database..table in table.dat -SServer -T -c -t "|\t\t\t\t\t|" -r "~\t\t\t\t\t~r\n" 

我正在使用ASE 15.7 SP126版本的BCP出來。 我對英寸使用BCP(13.0.1601.5)的SQL Server 2016版本。

根據線程here,我確定問題與用於-r選項的\ r \ n字符有關。如果我在out上使用-r「\ r \ n」進行測試,並且使用-r「0x0a」,則它可以工作(除了在數據中具有CRLF的記錄上失敗)。

只要我卸下了和在\ r \ n個字符,我可以在數據成功BCP。

有誰知道,如果是我可以使用的可打印字符+一個CRLF組合什麼辦法?

乾杯。

回答

1

如果你使用MSSQL的從ASE提取數據BCP,你可能要考慮使用ASE的BCP從ASE拉的數據,如果僅僅是爲了排除2個程序之間的任何問題。 [見此線程 - Sybase bcp vs MSSQL bcp - 詳情;特別是注意:They definitely do not handle output to a file the same way and the docs for each show that。]

爲什麼要堅持在終結者中使用CRLF(在一定程度上所有的\ t's)?任何你不能使用你知道的其他可打印字符組合的任何理由都不會出現在你的數據中,例如:

bcp ... -t"|&" -r "|&&" ... 
bcp ... -t"##&&" -r "||&&" ... 
+0

對不起 - 應該提到這一點。我正在使用BCP的ASE版本(15.7 SP126)。我會更新OP。 至於使用CRLF,純粹是爲了可讀性。至於選項卡,我嘗試了其他角色的組合,但發現我在一些散列字段中有錯誤匹配。標籤由組織中的其他人提出,所以我就這樣做了。 – Ash

+1

短追查違規記錄,查看實際數據(OD-C),並找出哪些領域正在生成錯誤...和測試,取消CRLF字符解決了這個問題知道的......我會可能需要刪除CRLF字符以獲得即時解決方案;那麼當我有一些空閒時間時,我可能會更仔細地研究這個問題(如果只是作爲一個學習練習) – markp

+0

謝謝,是的,這是目前的解決方案。我越想到它,我越是認爲文件被人讀取的機會很渺茫,所以它可能不是問題(我見過的最大的是35GB)。如果我必須打開一個,我只需要用一些東西來解決它。 – Ash