如何在Openrowset命令中使用变量

17

我正在尝试在 SQL Openrowset 命令中使用一个名为 filepath 的变量。我知道它无法显式接受变量,因此我需要使用动态 SQL。

目前有效的内容 -

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

然而,如果我尝试使用我的变量filepath

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;

我遇到了错误'Msg 137, Level 15, State 2, Line 15 Must declare the scalar variable "@filePath"。'

我确定这是一个语法问题,但还没有找到正确的格式。


请检查此链接,或许会对您有所帮助。 - starko
@starko 我刚刚看了那个问题。它有点有用,但似乎并没有直接解决我的问题。我已经尝试像问题中那样将变量包含在双引号中,但没有成功。 - bjjrolls
1个回答

21

请将您的脚本更改为以下内容。

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

样例输出: 在这里输入图片描述


你能解释一下 EXEC 行发生了什么吗?我已经将我的脚本更改为这样,但仍然看到错误消息... 必须声明标量变量 "@file_stream"。 - bjjrolls
我认为您没有更改动态查询中使用的变量。将其更改为file_stream1。还要确保在执行命令中声明了该变量。在执行行中,动态查询的结果被放入输出变量file_stream1以便取出。 - Unnikrishnan R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接