【发布时间】:2017-05-20 02:48:46
【问题描述】:
SQL Server 新手!
我尝试对 SQL Server 执行批量插入。我有以下名为 input.csv 的 csv 文件:
NO,Name,age,Reference,dateTime,Category
1,Stack@mail,23,Kiop,2017-03-02T12:23:00,D
2,OverEnd@Yahoo,22,CSK,2017-030-03T12:23:00,I
在该 CSV 文件中,我必须使用 BulkInsert 将其移动到 SQL Server 到下表架构中:
create table BulkInsertTemp
(
no int,
name nvarchar(50),
age int,
Ref nvarchar(30),
currentDatetime datetime,
Category nvarchar(40)
)
现在我需要像这样存储在 SQL 中:
no Name age Ref currentDatetime category
--------------------------------------------------------
1 Stack 23 Kiop 2017-03-02 12:23:00 D
2 OverEnd 22 CSK 2017-03-03 12:23:00 I
我刚刚尝试在下面查询另一个表以移入 SQL Server。
create table bulkInsert(no varchar(50),name varchar(50));
BULK INSERT bulkInsert
FROM 'C:\MyInput\BulkInsert\BulkInsertData.txt'
WITH
(FIRSTROW = 1,
ROWTERMINATOR = '\n',
FIELDTERMINATOR = ',',
ROWS_PER_BATCH = 10000)
如果不需要修改数据,我的查询就有效。
但在input.csv 中,我必须更改列值,例如 if name is "Stack@mail" 以在 SQL 中存储为 "Stack"
我是批量插入选项的新手,所以我不知道如何从现有的列中派生列。
任何人,请指导我解决我的要求?
【问题讨论】:
-
您可以先将原始值批量插入到临时表中,然后将它们(插入...选择)从那里复制到您的实际目标表...同时从临时表中选择您可以做您需要的任何转换...
-
BULK INSERT已针对最大速度进行了优化 - 但这样做会牺牲一些灵活性,并且不在插入时提供任何操作/转换/更改数据的方式。使用@PrfctByDsgn 概述的方法 - “按原样”插入临时表(无操作、无更改等),然后然后在数据位于 SQL Server 中后对数据执行任何您需要执行的操作 -
感谢您的建议让我试试
-
我怀疑我的 csv 文件在一台机器上,但 SQL 在另一台机器上运行。在这个类别中,批量插入是否有效。
标签: sql-server sql-server-2008 csv