使用 CSV 文件中的批量插入时修改和检查数据 - SQL
Modify and Check Data while using Bulk Insert from CSV file - 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 文件第一列中的所有字符是否仅为数字,如果是,则将其插入。而且我还需要在插入时在这些字符之前添加一个特定的单词。
01 - 123,M,A,USA
02 - H24,N,Z,USA
我只需要插入第一行,因为第一列只有数字'123',我需要在这个数字之前添加"D",然后将其插入SQL。所以我们有这样的东西是 SQL 插入后:
"D123","M","A","USA"
可能吗?
让我们考虑一个示例 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
现在创建一个非XML 格式的文件(在C 盘中)并将其命名为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 格式File.The 的信息,请小心这个formatting.Click 这个Link 基本示例就是这样。
请根据需要更改格式文件。(如DataType、ChaterLength等)
我创建了一个示例 table 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)
)
现在如果你 select 你的 table 你会得到这个(我已经试过了,它工作正常)
这是您的答案如果您愿意,可以订购专栏。这非常简单,只需将查询放在第一个括号中并根据您的方式对其进行排序或格式化。
我正在使用下面的方法将 csv 文件中的数据插入 SQL。
BULK
INSERT tblMember
FROM 'F:\target.txt'
WITH
(
DATAFILETYPE='widechar',
CODEPAGE = 'ACP',
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n',
ERRORFILE = 'C:\CSVDATA\ErrorRows.csv',
)
GO
我需要做两件事。首先检查每一行的 CSV 文件第一列中的所有字符是否仅为数字,如果是,则将其插入。而且我还需要在插入时在这些字符之前添加一个特定的单词。
01 - 123,M,A,USA
02 - H24,N,Z,USA
我只需要插入第一行,因为第一列只有数字'123',我需要在这个数字之前添加"D",然后将其插入SQL。所以我们有这样的东西是 SQL 插入后:
"D123","M","A","USA"
可能吗?
让我们考虑一个示例 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
现在创建一个非XML 格式的文件(在C 盘中)并将其命名为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 格式File.The 的信息,请小心这个formatting.Click 这个Link 基本示例就是这样。
我创建了一个示例 table 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)
)
现在如果你 select 你的 table 你会得到这个(我已经试过了,它工作正常)
这是您的答案如果您愿意,可以订购专栏。这非常简单,只需将查询放在第一个括号中并根据您的方式对其进行排序或格式化。