SQL 服务器创建存储过程语法错误
SQL server create stored procedure syntax error
我正在尝试创建一个简单的存储过程:
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
Incorrect syntax near '+'.
有什么想法吗?
@filepath 是整数,你可能想要
'SELECT * FROM ' + convert(varchar,@FilePath)
在使用 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 注入攻击。
此外,您的查询似乎不正确,因为我怀疑您的 table 名称是整数。
我正在尝试创建一个简单的存储过程:
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
Incorrect syntax near '+'.
有什么想法吗?
@filepath 是整数,你可能想要
'SELECT * FROM ' + convert(varchar,@FilePath)
在使用 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 注入攻击。
此外,您的查询似乎不正确,因为我怀疑您的 table 名称是整数。