我正在开发一个程序来拉XML
文件,WordPress
使您可以下载(本质上是一个备份副本)。OPENROWSET:sp_executesql语句在@param失败
此时我正在自动化该过程,以允许在SQL Server
上频繁备份我的数据,由于某种原因,我一直在开发查询以运行OPENROWSET
,其中XML
文件将位于此处。
DECLARE @SQL NVARCHAR(MAX)
DECLARE @ParamDefinition NVARCHAR(500) = N'@fstring NVARCHAR(MAX)'
DECLARE @string VARCHAR(MAX) =
N'C:\[FilePath]\Reviews\thehesperian2016-07-29.xml'
SET @SQL =
N'INSERT INTO #Temp (Extract_Date, XMLDATA)
SELECT GETDATE()
, A.*
FROM OPENROWSET(BULK @fstring, SINGLE_BLOB, CODEPAGE = ' + '''RAW''' + ') AS A'
EXEC sp_executesql @SQL
, @ParamDefinition
, @fstring = @string
错误:
Msg 102, Level 15, State 1, Line 4
Incorrect syntax near '@fstring'.
我可以把它变成在谓语表一个简单的查询,所以我有理由怀疑它是filepath
被读取的方式。 我花了几个小时来试图弄清楚为什么这是错的。虽然我可以在BULKINSERT在此example使用QUOTENAME
的,我希望能嵌入所有的,在动态SQL(因此仍使用sp_executesql
)
什么,或者为什么我这样做不对?任何帮助将不胜感激。 - 问候,
ANSWER
OPENROWSET - MSDN宣布在自己的一段话:
OPENROWSET does not accept variables for its arguments.
QUOTENAME
就足够了,虽然我没有反正跑几个小REPLACE
功能。
在您的动态SQL中,@fstring被视为文字而不是变量。 – scsimon
@scsimon right,忘记提及我通过proc参数调用fstring,所以SQL Server不应该从我的理解中猜出来。 –
对于动态SQL,您必须使用+'''@var'''+ Concat,但仍不确定它是否在OPENROWSET中。我不认为它会工作 – scsimon