Я работаю со вставкой OPENROWSET (BULK...)
, где я вставляю небольшой файл XML в таблицу перед тем, как в конечном итоге уничтожить и преобразовать его. Следующее работает просто отлично (большое спасибо другим постам).
DECLARE @v_inputfile AS varchar(50)
DECLARE @v_xmlfile AS xml
DECLARE @v_sql AS nvarchar(1000)
DECLARE @v_loadeddatetime AS DATETIME
SET @v_inputfile='E:\inputfile.xml'
SET @v_sql= 'INSERT INTO'+
' Tbl1_XMLStaging1 (XMLData, LoadedDateTime)' +
' SELECT CONVERT(XML, BulkColumn), ' +
' GETDATE() ' +
'FROM OPENROWSET(BULK '''+ @v_inputfile +''', SINGLE_BLOB) AS x;'
EXEC(@v_sql);
Однако моя цель также вставить INSERT InputFileName в Tbl1_XMLStaging1, но у меня возникают проблемы с @v_inputfile в передаваемой инструкции Selectв качестве переменной в запросе.
Я попробовал следующее:
DECLARE @v_inputfile AS varchar(50)
DECLARE @v_xmlfile AS xml
DECLARE @v_sql AS nvarchar(1000)
DECLARE @v_loadeddatetime AS DATETIME
SET @v_inputfile='E:\inputfile.xml'
SET @v_sql= 'INSERT INTO'+
' Tbl1_XMLStaging1 (XMLData, LoadedDateTime, XMLFileName)' +
' SELECT CONVERT(XML, BulkColumn), ' +
' GETDATE(), ' +
'@v_inputfile ' +
'FROM OPENROWSET(BULK '''+ @v_inputfile +''', SINGLE_BLOB) AS x;'
EXEC(@v_sql);
Я получаю различные сообщения об ошибках:
Должен объявить скалярную переменную "@v_inputfile"
Если я удаляю одинарные кавычки вокруг переменной, то получаю ошибку
Неверный синтаксис рядом с 'E:'
Я прочесал несколько предыдущих постови, кажется, не может пройти через это, не выполняя никаких других операций.
После ответа. Я пытаюсь сделать следующее и получаю сообщение об ошибке
Неверный синтаксис рядом с ',
Код:
DECLARE @v_inputfile AS varchar(50)
DECLARE @v_xmlfile AS xml
DECLARE @v_sql AS nvarchar(1000)
DECLARE @v_stmt AS nvarchar(1000)
DECLARE @params AS nvarchar(100)
DECLARE @v_loadeddatetime AS DATETIME
SET @v_inputfile='E:\inputfile.xml'
SET @v_sql= 'INSERT INTO'+
' Tbl1_XMLStaging1 (XMLData, LoadedDateTime, XMLFileName)' +
' SELECT CONVERT(XML, BulkColumn), ' +
' GETDATE(),' +
' @v_inputfile ' +
'FROM OPENROWSET(BULK '''+ @v_inputfile +''', SINGLE_BLOB) AS x;'
EXEC @v_stmt = @v_sql, @params = N'@v_inputfile varchar(50)', @v_inputfile;