2014-07-24 35 views
0

我對批量插入過程如下:SQL把「內‘’程序

ALTER PROCEDURE [dbo].[usp_impt] 
AS 
BEGIN 
    Declare @SQL1 varchar(150), @path varchar(100), 
      @pathtable varchar(100), @date datetime 

    set @date = getdate() 

    -- set path for files 
    set @path= '\\ff\avc\ce\ed_imp\' 
    set @pathtable = @path + 'ABC20140723.csv' 

    -- Delete data from tables 
    delete from table1 

    -- set sql 
    set @SQL1 = "BULK INSERT dbo.table1 FROM '" + @pathtable 
       + "' WITH (FIRSTROW = 3,MAXERRORS = 0,FIELDTERMINATOR = ',')" 

    -- Bulk insert 
    exec(@sql1) 
end 

它工作時,我的數據有‘谷歌,公司’除了罰款,將其轉換爲」谷歌「」公司「 我想寫FIELDTERMINATOR ='」,「'而不是',',但是,我不知道如何把它放到我的@sql1字符串中?

另外,是否推薦我寫一個格式文件?我的csv文件有200列和行。是否需要寫每行?感謝您的任何建議。

回答

0

簡短的回答是你不能用BULK INSERT來做到這一點。 BULK INSERT無法說明逗號是分隔符,逗號是數據的一部分。您的源數據顯然沒有引用字符串字段值(即用引號括起來)。對於逗號分隔的字段,如果任何數據包含逗號,則它必須用引號括起來,否則BULK INSERT會將其視爲字段終止符。在插入之前,您必須更新源數據以使用引號括起字符串。

我從文本文件和csv文件運行數據加載時經常遇到這種情況。唯一的解決方案是讓數據源添加引號或使用不同的分隔符,例如管道(|)或切換到固定寬度的字段。無論哪種情況,源數據都必須修復。