Sql server SQL server创建存储过程语法错误

Sql server SQL server创建存储过程语法错误,sql-server,tsql,stored-procedures,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 +

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

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,15级,状态1,程序SP_测试,第12行
“+”附近的语法不正确


有什么想法吗?

@filepath是int,您可能想要类似的东西

'SELECT * FROM ' + convert(varchar,@FilePath)

使用时不能使用动态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注入攻击


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

旁注:您不应该在存储过程中使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!哦,是的,谢谢提醒,不过出于测试目的,我刚刚将sp命名为quick and dirty。-您应该始终为您使用的任何
varchar
变量和参数提供长度。非常感谢。这会奏效的。哦,嗯,int数据类型是我自己的输入错误…呵呵…它应该是一个VARCHAR