我正在開發一個程序來拉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