我正在尝试创建一个简单的存储过程:
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
附近的语法不正确
' +'。
有什么想法吗?
答案 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)