2011-05-09 117 views
1

我确定这是一个常见问题,但我似乎无法找到我正在寻找的帮助。道歉!SQL Server批量插入 - 如何定义缺少的字段?

我试图从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 
+0

可能重复[BULK INSERT列数不一致](http://stackoverflow.com/questions/2601941/bulk-insert-with-inconsistent-number-of-columns) – 2011-05-09 17:59:18

+0

@Dustin Laine:不完全是相同特定一个,但也有其他重复的 – gbn 2011-05-09 18:05:26

+0

可能重复的[时用于批量复制程序(BCP)的格式文件(http://stackoverflow.com/questions/1994411/when-to-use-a- format-file-for-bulk-copy-program-bcp) – gbn 2011-05-09 18:06:41

回答

2

您是否看到过适用于bcp和BULK INSERT的“Keeping Nulls or Using Default Values During Bulk Import”? 我没有了一会儿做到了这一点(我会加载一个简单的临时表和在单独的冲洗步骤后充实),但它看起来像默认设置可以保存,当你使用:

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

丢失列,您需要使用format files

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

+0

嗯,我可以做到这一点,使用临时表,然后将其复制到真正的表。不过,我希望有一个更优雅的解决方案。我确实看过格式文件页面,但我不确定这是否会让我做我想做的事情。我会再看看它,并权衡我的选择。谢谢! – Joshua 2011-05-09 18:14:28