2009-09-29 42 views
2

我正在嘗試使用SQL Server bcp實用工具從samba共享中導入文本文件。 bcp在Unix行結尾處窒息。我相信我可以在Unix或Windows上添加一箇中間步驟,將行結尾更改爲Windows風格。但我寧願不經修改就從Unix導入文件。SQL Server可以在Unix行結尾的文件中使用bcp嗎?

有人知道是否有辦法告訴SQL Server bcp查找Unix行尾?

回答

2

您必須使用帶有bcp的格式文件並將終止符指定爲\ n。交互式命令行將始終附加\ r,其中格式文件將完全使用您指定的內容。參考http://www.eggheadcafe.com/software/aspnet/32239836/bcp-out-with-char10-as-row-terminator.aspx

創建一個格式文件在BOL中解釋得非常好,但如果您需要幫助,請發表評論/更新原文。

+0

+1 * the * answer。 BOL也鏈接到http://msdn.microsoft.com/en-us/library/ms191485.aspx,它提到了交互性。 – gbn 2010-07-31 05:09:18

+0

碰到你的答案我希望... :-) – gbn 2010-08-04 19:45:13

+1

我不能很快驗證這一點,但它是有道理的。我接受基於gbn的認可這個答案。 – 2010-08-11 19:30:38

2

你試過設置ROWTERMINATOR ='\ n'嗎?

+0

我可以使用-r參數,並將其設置爲\ n,但是這是默認,所以我認爲它不會有任何好處。此外,它可能會將\ n作爲特定於平臺的行終止符來解釋,這會給我們帶來與以前相同的問題。 -r參數是你在說什麼? – 2009-09-30 12:24:40

+0

http://msdn.microsoft.com/en-us/library/ms188365.aspx,這表示默認是'\ r \ n',這是不相同的。 – CSharpAtl 2009-09-30 13:10:26

+0

好的,我明白了。我正在使用bcp命令行實用程序,而不是批量插入。它有不同的選項和默認值。 – 2009-09-30 13:14:36

-2

是的,這是令人發狂的。我的理解是SQL Server bcp總是在你希望使用的任何行結束符之前插入一個\ r。所以,如果你不使用-r,你會期望它只使用\ n。但它不......它愚蠢地插入\ r,以便它可以使用\ r \ n。如果你指定-r \ r \ n,那麼它仍然不起作用;我懷疑是因爲它現在想要\ r \ r \ n行結束。這是Windows世界的一些白癡編碼的所有工作,試圖使初學者的生活更輕鬆,並最終使其他人不可能完成任務。將文件從Sybase傳輸到SQL服務器時遇到此問題,並且解決方案是在Sybase的bcp輸出中指定-r \ n(它的工作方式與您要求的完全相同!)和-r \ n(或僅僅是't使用-r)爲SQL Server bcp英寸

+1

如果你閱讀了bcp,你會知道這是有記錄的,以及如何避開它。我馬恩,什麼樣的白癡不使用格式文件除了簡單的CSV以外的任何內容。或者使用SSIS。 – gbn 2010-07-31 15:15:17

+0

@gbn,那個白癡就是我!我會在下一次查看格式文件。 – 2010-08-11 19:32:44

2

我不認爲你可以從bcp命令行執行此操作。但是,我認爲以下SQL版本將起作用。

DECLARE @Command nvarchar(1000) 

SET @Command = N'BULK INSERT MyTable 
FROM ''<path\file>'' 
WITH (ROWTERMINATOR = '''+CHAR(10)+''')' 

exec sp_executeSQL @Command 
+0

我用於此的BCP命令等價物是將行終止符指定爲換行符,例如,: '-r 0xa' – 2015-09-18 20:31:01

0

如果你沒有很多時間來研究的很詳細BCP,看看這個: http://msdn.microsoft.com/en-us/library/ms190759.aspx

它會給你簡單的例子,說明什麼交互式提示的意思,選項保存格式一次你完成了(如果你要重複這樣做)等等。

如果你的數據很大或者你有幾個你想要的文件,你可以先做一個表然後做一個試驗導出(bcp將採用簡單的選擇作爲第一個參數),並且仍然按列交互式地選擇格式。如果你有一些額外的理由,你可以深入挖掘保存的fmt文件。

3

簡單的答案是使用十六進制,作爲一個評論所提到的,作爲行終止:

-r 0x0a 
相關問題