2016-10-03 21 views
1

SQL Openrowsetコマンドで可変ファイルパスを使用しようとしています。私はそれが明示的に変数を受け入れることができないと私は動的SQLを使用する必要があることを知っている。現在、どのような作品Openrowsetコマンドで変数を使用する方法

-

SELECT @file_stream = CAST(bulkcolumn AS VARBINARY(MAX)) 
FROM OPENROWSET(BULK 'C:\Temp\print4.pdf', SINGLE_BLOB) AS x 

私は私の変数ファイルパス

declare @file_stream VARBINARY(MAX) 

declare @filePath NVARCHAR(128) 
set @filePath = 'C:\Temp\print4.pdf' 

set @command = N'SELECT @file_stream = CAST(bulkcolumn AS varbinary(MAX)) 
       from OPENROWSET(BULK ' + @filePath + ', 
       SINGLE_BLOB) ROW_SET' 

EXEC sp_executesql @command, @filePath, @file_stream; 

を使用しようとする場合は、私はエラー「メッセージ137、レベル15を取得し、状態2、行15 を宣言する必要がありますスカラー変数 "@filePath"。

これは構文の問題であると確信していますが、まだフォーマットする方法を理解できていません。

+0

チェックこの[リンク](http://stackoverflow.com/questions/13831472/using-a-variable-in-openrowset-query)たぶん、あなたを助けます。 – starko

+0

@starko私はその質問を実際に見ていました。これは少し役に立ちますが、直接私の問題に対処していないようです。私は無駄な質問のような二重引用符で変数を含めることを試みました。 – bjjrolls

答えて

3

スクリプトを以下のように変更してください。

DECLARE @file_stream VARBINARY(MAX) 
DECLARE @command nvarchar(1000) 
DECLARE @filePath NVARCHAR(128) 
set @filePath = 'C:\Temp\print4.pdf' 

set @command = N'SELECT @file_stream1 = CAST(bulkcolumn AS varbinary(MAX)) 
       from OPENROWSET(BULK ''' + @filePath + ''', 
       SINGLE_BLOB) ROW_SET' 

EXEC sp_executesql @command, N'@file_stream1 VARBINARY(MAX) OUTPUT',@file_stream1 [email protected]_stream OUTPUT 

select @file_stream 

サンプル出力: enter image description here

+0

EXEC回線で何が起こっているのか少し説明できますか?私はこれにスクリプトを変更しましたが、まだエラーメッセージが表示されています...スカラー変数 "@file_stream"を宣言しなければなりません。 – bjjrolls

+0

私はあなたが動的クエリ内で使用される変数を変更していないと思います。それをfile_stream1に変更します。また、変数はexecuteコマンドで宣言されます。実行行では、動的クエリの結果が出力変数file_stream1に取り込まれて出力されます。 –

+0

あなたは正直、ありがとう! – bjjrolls

関連する問題