SQL Server创建存储过程语法错误

时间:2015-04-14 09:08:05

标签: sql-server tsql stored-procedures

我正在尝试创建一个简单的存储过程:

CREATE PROCEDURE SP_Test @FilePath int
AS
    SELECT
       LastName, FirstName
    INTO 
       tmp_tblPerson
    FROM 
       OPENROWSET('MSDASQL','Driver={Microsoft Access Text Driver (.txt, .csv)}','SELECT * FROM ' + @FilePath + "'")
GO

但我收到一个语法错误,我不明白......?

  

Msg 102,Level 15,State 1,Procedure SP_Test,Line 12
  ' +'。

附近的语法不正确

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用OPENROWSET时,无法使用动态SQL。解决方法是使整个块使用动态创建的SQL,如下所示:

CREATE PROCEDURE SP_Test @FilePath int
AS
    DECLARE @sql NVARCHAR(MAX) = 
        'SELECT LastName, FirstName 
        INTO tmp_tblPerson 
        FROM OPENROWSET(
            ''MSDASQL'',
            ''Driver={Microsoft Access Text Driver (.txt, .csv)}'', 
            ''SELECT * FROM '' + @FilePath)'

    EXEC(@sql)

与动态SQL一样,请确保您不会受到SQL注入攻击的攻击。<​​/ p>

此外,您的查询似乎不正确,因为我怀疑您有一个以整数作为名称的表。

答案 1 :(得分:0)

@filepath是int,你可能想要像

这样的东西
'SELECT * FROM ' + convert(varchar,@FilePath)