存储过程/批量插入困难

时间:2016-06-23 17:30:44

标签: sql-server

我正在编写一些非常简单的存储过程,这些存储过程采用CSV并将它们导入数据库。但是,我遇到了语法错误:

  

Msg 102,Level 15,State 1,Line 3
  “FIELDTERMINATOR'。”附近的语法不正确。

我的SQL非常简单,所以我不确定为什么会收到此错误:

CREATE PROCEDURE [dbo].[addEmployees]
    @filePath NVARCHAR(150)
AS
    declare @sql varchar(max)
    select @sql = 'BULK INSERT dbo.insuranceMidAm.employees FROM " ';
    select @sql = @sql + @filePath;
    select @sql = @sql + ' " WITH(
                                  FIRSTROW = 2
                                  FIELDTERMINATOR = ",",
                                  ROWTERMINATOR = "\n"
                                 )';

    exec(@sql)

EXEC dbo.addEmployees 'TEST_2016_employees.txt'

我尝试了各种引号和标点符号组合,但一直出错。消息来源可能是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

文件FIELDTERMINATORROWTERMINATOR周围的双引号应为单引号(因为您使用的是动态SQL,所以双倍加注):

FROM '' ';
select @sql = @sql + @filePath;
select @sql = @sql + ' '' WITH(
            FIRSTROW = 2
            FIELDTERMINATOR = '','',
            ROWTERMINATOR = ''\n''
        )';

答案 1 :(得分:1)

你的报价不正确,应该是两个'彼此相邻而不是"。你在2之后也错过了一个逗号。

FROM '' ';
select @sql = @sql + @filePath;
select @sql = @sql + ' '' WITH(
            FIRSTROW = 2,
            FIELDTERMINATOR = '','',
            ROWTERMINATOR = ''\n''
        )';