【问题标题】:How to bulk insert with derived columns in SQL Server?如何在 SQL Server 中批量插入派生列?
【发布时间】: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


【解决方案1】:

我建议构建一个 SSIS 包来执行此操作。如果您不知道如何或没有时间,您可以运行SQL Server Import and Export Wizard,它实际上会在幕后为您创建一个 SSIS 包。

希望这能让你朝着正确的方向前进。

诺埃尔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多