我的批量插入程序如下:
ALTER PROCEDURE [dbo].[usp_impt]
AS
BEGIN
Declare @SQL1 varchar(150), @path varchar(100),
@pathtable varchar(100), @date datetime
set @date = getdate()
-- set path for files
set @path= '\\ff\avc\ce\ed_imp\'
set @pathtable = @path + 'ABC20140723.csv'
-- Delete data from tables
delete from table1
-- set sql
set @SQL1 = "BULK INSERT dbo.table1 FROM '" + @pathtable
+ "' WITH (FIRSTROW = 3,MAXERRORS = 0,FIELDTERMINATOR = ',')"
-- Bulk insert
exec(@sql1)
end
它工作正常,除非我的数据有“Google,Inc”,它会转换为“Google”“Inc”。
我想编写FIELDTERMINATOR ='“,”而不是',',但是,我不知道如何将它放入我的@sql1
字符串中?
另外,我建议写一个格式文件吗?我的csv文件有200列和行。我需要写每一行吗?谢谢你的任何建议。
答案 0 :(得分:0)
简短的回答是你不能用BULK INSERT这样做。 BULK INSERT无法分辨逗号是什么分隔符以及逗号是数据的一部分。您的源数据显然没有引用的字符串字段值(即用引号括起来)。对于逗号分隔的字段,如果任何数据包含逗号,则必须用引号括起来,否则BULK INSERT会将其视为字段终止符。在插入之前,您必须使用引号将源数据更新为环绕字符串。
我在从文本文件和csv文件运行数据加载时经常遇到这种情况。唯一的解决方案是使数据源添加引号或使用不同的分隔符,例如管道(|)或切换到固定宽度字段。在任何一种情况下,都必须修复源数据。