2010-01-05 78 views
23

我想從SQL查詢(SQL Server 2005)中讀取文本文件,但根本沒有任何運氣。我用EXEC和xp_cmdshell嘗試了各種東西,但都不起作用。這是我試圖解決這個問題的一般方法:使用SQL Server讀取文本文件

CREATE TABLE temp (data varchar(2000)); 
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt'; 

然後我嘗試從臨時表中選擇數據。我搜查了很多東西,我無法分辨出我錯了什麼。幫幫我?

回答

31

你的文本文件是什麼樣的?每行有記錄?

你必須檢查出BULK INSERT陳述 - 應該是這個樣子:

BULK INSERT dbo.YourTableName 
FROM 'D:\directory\YourFileName.csv' 
WITH 
(
    CODEPAGE = '1252', 
    FIELDTERMINATOR = ';', 
    CHECK_CONSTRAINTS 
) 

在這裏,在我的情況,我在導入CSV文件 - 但是你應該能夠導入文本文件也是如此。

從MSDN文檔 - 這裏的每行有希望適用於文本文件有一個字段的樣本:

BULK INSERT dbo.temp 
    FROM 'c:\temp\file.txt' 
    WITH 
     (
     ROWTERMINATOR ='\n' 
    ) 

似乎在我的測試環境中工作得很好:-)

+0

這對我的工作也很好。謝謝! – 2010-01-05 21:55:49

0

您是否需要這樣做一次,或作爲普通數據庫操作的一部分(即響應觸發器,預定事件等)?

無論哪種方式,你最好創建一個SSIS包。

  1. 在SQL Management Studio中,右鍵單擊數據庫。
  2. 選擇任務|導入數據...
  3. 按照嚮導說明進行操作。提示時選擇「平面文本文件」作爲提供者。

我沒有使用dbo.xp_cmdshell(根據您的示例),但我想象捕獲輸出是問題。

-2
BULK INSERT dbo.temp 

FROM 'c:\temp\file.txt' --- path file in db server 

WITH 

    (
    ROWTERMINATOR ='\n' 
) 

它爲我工作,但通過EditPlus的保存到ANSI編碼的多語言