2017-12-31 319 views
1

変数なしで実行されるクエリがあります。それは期待どおりに動作します:文字列パスの代わりに変数を使用するSQL - OPENROWSET

INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime) 
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK 'C:\xml\hamlet.xml', SINGLE_BLOB) AS x; 

しかし、私は変数に追加します。それは動作しません(私は文字列を変数に置き換えました)。私はこのエラーを取得する=> '@path'の近くに構文が間違っています。

DECLARE @path varchar(50) = 'C:\xml\hamlet.xml'; 

INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime) 
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK @path, SINGLE_BLOB) AS x; 

ここで何が間違っているのですか?

答えて

2

パラメータ化された動的SQLクエリが機能しない可能性があります。

DECLARE @path varchar(50) = 'C:\xml\hamlet.xml', 
     @sql nvarchar(max)= '' 

set @sql = ' 
INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime) 
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK ''' + @path +''', SINGLE_BLOB) AS x;' 

exec sp_executesql @sql,N'' 
+0

「C:」付近の構文が正しくありません。 私はこの状況で変数を文字列として認識しません –

+1

@JaxPatočkaは一重引用符を含むのを忘れていました。更新された回答をお試しください。注意してください、私は元のクエリが正常に動作すると信じています。 – andrews

関連する問題