如何在Openrowset命令中使用变量

bjj*_*lls 4 sql sql-server openrowset

我试图在SQL Openrowset命令中使用变量文件路径.我知道它不能显式接受变量,我需要使用动态SQL.

目前的工作原理 -

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

但是,如果我尝试使用我的变量文件路径

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;
Run Code Online (Sandbox Code Playgroud)

我收到错误'消息137,级别15,状态2,行15必须声明标量变量"@filePath".

我确定这是一个语法问题,但还没有弄清楚它应该如何格式化.

Unn*_*n R 8

像下面一样更改脚本.

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 =@file_stream OUTPUT

select @file_stream
Run Code Online (Sandbox Code Playgroud)

样本输出: 在此输入图像描述