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