2016-06-24 83 views
1

我正在使用下面的方法將數據從csv文件插入到SQL中。從CSV文件使用批量插入時修改和檢查數據 - SQL

BULK 
INSERT tblMember 
FROM 'F:\target.txt' 
WITH 
(
DATAFILETYPE='widechar', 
CODEPAGE = 'ACP', 
FIELDTERMINATOR = ';', 
ROWTERMINATOR = '\n', 
ERRORFILE = 'C:\CSVDATA\ErrorRows.csv', 
) 
GO 

我需要做兩件事。首先檢查每行的CSV文件第一列中的所有字符是否只有數字,如果是,請插入它。而且我還需要在插入這些字符前添加一個特定的Word。

01 - 123,M,A,USA 
02 - H24,N,Z,USA 

我只需要插入一行,因爲第一欄只位數「123」,而我需要這個號碼前加「d」,然後將其插入SQL。所以我們有這樣的東西是插入後的SQL:

"D123","M","A","USA" 

可能嗎?

回答

1

讓我們考慮一個樣本CSV(在C盤)文件target-c.txt包含四個數據線。(請注意我有使用target-c.txttarget.txt

123,M,A,USA 
H24,N,Z,USA 
H25,N,V,USA 
456,M,U,USA 

現在創建一個非XML格式文件(在C Drive)將其命名爲targetFormat.fmt。和填充在文件中按以下方式

9.0 
4 
1  SQLCHAR  0  100  ","  1  Col1    SQL_Latin1_General_CP1_CI_AS 
2  SQLCHAR  0  100  ","  2  Col2    SQL_Latin1_General_CP1_CI_AS 
3  SQLCHAR  0  100  ","  3  Col3    "" 
4  SQLCHAR  0  100  "\r\n" 4  Col4    SQL_Latin1_General_CP1_CI_AS 

,如果你想了解更多關於非XML格式的文件。該簡單的例子會是這樣,請謹慎使用該formatting.Click這個Linkenter image description here 根據您的需要,請更改格式文件。

我創建了一個示例表tblMember(請根據自己的方式來改變,像列名,數據類型等。記住(如數據類型,ChaterLength等)你必須改變targetFormat.fmt文件太)

CREATE TABLE tblMember 
    ( 
    Col1 nvarchar(50), 
    Col2 nvarchar(50) , 
    Col3 nvarchar(50) , 
    Col4 nvarchar(50) 
    ); 

然後根據你的方式(使用批量插入下面的查詢其與整數值

Col1中的前面加一個字符「d」現在
INSERT INTO tblMember(Col1,Col2,Col3,Col4) 
(
select 'D'+t1.Col1 AS Col1,t1.Col2,t1.Col3,t1.Col4 
from openrowset(bulk 'C:\target-c.txt' 
     , formatfile = 'C:\targetFormat.fmt' 
     , firstrow = 1) as t1 
where t1.Col1 not like '%[^0-9]%' --Not Like Letter Number mixed (123, 456) 
UNION 
select t1.Col1,t1.Col2,t1.Col3,t1.Col4 
from openrowset(bulk 'C:\target-c.txt' 
     , formatfile = 'C:\targetFormat.fmt' 
     , firstrow = 1) as t1 
where t1.Col1 like '%[^0-9]%'--Like Letter Number mixed (H24, H25) 
) 

,如果你選擇你的表,你會得到這個(我曾嘗試和它的工作的罰款) enter image description here

這裏是你的答案您可以排序的列,如果你想。它非常簡單,只需將查詢保存在第一個括號中,並按照您的方式進行排序或格式化即可。