2

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

我正在尝试从 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
4

1 回答 1

2

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

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

对于缺少的列,您需要使用格式文件

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

于 2011-05-09T18:01:20.163 回答