【问题标题】:SQL Server Bulk Insert - How to define missing fields?SQL Server 批量插入 - 如何定义缺少的字段?
【发布时间】:2011-05-09 17:54:16
【问题描述】:

我确定这是一个常见问题,但我似乎无法准确找到我正在寻找的帮助。道歉!

我正在尝试从 CSV 文件执行批量插入 - 我需要向其中插入数据的表有一些不能为空的字段 - 例如通常使用 newid() 生成的行唯一标识符字段,以及其他一些字段,例如进行更改的用户的 ID 号等...

上网查了一下,我想我知道如果 CSV 文件包含与表相同数量的字段,或者如果可以将缺少的字段保留为空或默认值,如何进行基本的批量导入,但我没有能够找到某个地方向我展示如何从 CSV 文件中分配一些值,并预定义其他所需的表值。如果有人能告诉我如何从 CSV 导入,我可以从存储过程中的变量中分配缺失的字段,那将非常有帮助!

有什么建议吗?这是我一直在尝试使用的代码。

BULK
INSERT tbl1_
FROM '\\...\importtest.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
--Check the content of the table.
SELECT *
FROM tbl1_
GO
--Drop the table to clean up database.
SELECT *
FROM tbl1_
GO

【问题讨论】:

标签: sql sql-server csv bulk-import


【解决方案1】:

您是否看到适用于 bcp 和 BULK INSERT 的“Keeping Nulls or Using Default Values During Bulk Import”? 我已经有一段时间没有这样做了(我会加载一个简单的临时表并稍后在单独的刷新步骤中进行丰富),但看起来在您使用时可以保留默认值:

INSERT ... SELECT * FROM OPENROWSET(BULK...)

对于缺少的列,您需要使用format files

这两个想法略有不同。就个人而言,我会加载一个临时表,然后从中复制,以便 CSV 和临时表列匹配。然后,我将在第二步加载“真实”表。这允许您首先验证数据,或进行一些 bcp 后处理。

【讨论】:

  • 嗯——我可以这样做,使用临时表,然后将其复制到真实表中。不过,我希望有一个更优雅的解决方案。我确实看过那个格式文件页面,但我不确定这是否能让我做我想做的事。我会再看看它并权衡我的选择。谢谢!
猜你喜欢
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多