Я разрабатываю программу для извлечения файла XML
, который WordPress
позволяет вам загрузить (по сути, резервную копию).
В этот момент я автоматизировал процесс, чтобы разрешить частое резервное копирование моих данных на 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
. Я провел несколько часов, ломая голову, пытаясь понять, почему это неправильно. Хотя я МОГУ использовать QUOTENAME
, как в этом например в BULKINSERT, я надеялся встроить все это в динамический SQL (поэтому все еще использую sp_executesql
)
Что или почему я делаю неправильно? Любая помощь будет оценена. - С Уважением,
ОТВЕТ
OPENROWSET — MSDN объявляет в собственном абзаце:
OPENROWSET не принимает переменные в качестве аргументов.
QUOTENAME
достаточно, хотя я все равно запустил несколько второстепенных REPLACE
функций.