我正在使用以下方法将数据从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"
可能的?
答案 0 :(得分:1)
让我们考虑一个包含四行数据的示例CSV(在C盘中)文件target-c.txt
。(注意我使用target-c.txt
而不是target.txt
)
123,M,A,USA
H24,N,Z,USA
H25,N,V,USA
456,M,U,USA
现在创建一个名为targetFormat.fmt
的非XML格式文件(在C盘中)。并按以下方式填充文件
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格式文件的更多信息,请单击此Link。基本示例如下。 请根据需要更改格式文件。(如DataType,ChaterLength等)
我创建了一个示例表tblMember
(请根据您的方式更改,例如列名,数据类型等。请记住,您还必须更改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)
)
现在,如果你选择你的桌子,你会得到这个(我已经尝试过并且工作正常)
以下是您的回答如果您愿意,可以订购该列。它非常简单,只需将查询放在第一个括号中,然后根据自己的方式对其进行排序或格式化。