sql在执行批量插入存储过程时放入“内部”

时间:2014-07-24 19:44:44

标签: sql sql-server

我的批量插入程序如下:

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列和行。我需要写每一行吗?谢谢你的任何建议。

1 个答案:

答案 0 :(得分:0)

简短的回答是你不能用BULK INSERT这样做。 BULK INSERT无法分辨逗号是什么分隔符以及逗号是数据的一部分。您的源数据显然没有引用的字符串字段值(即用引号括起来)。对于逗号分隔的字段,如果任何数据包含逗号,则必须用引号括起来,否则BULK INSERT会将其视为字段终止符。在插入之前,您必须使用引号将源数据更新为环绕字符串。

我在从文本文件和csv文件运行数据加载时经常遇到这种情况。唯一的解决方案是使数据源添加引号或使用不同的分隔符,例如管道(|)或切换到固定宽度字段。在任何一种情况下,都必须修复源数据。