You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server sp_executesql输出变量返回NULL问题求助

问题解决:动态SQL输出参数无法获取值

你的核心问题是动态SQL里没有将查询结果赋值给输出参数,导致sp_executesql只是返回了结果集,但没把内容写入@QueryResult变量。

修改方案

把动态SQL中的普通SELECT改成赋值给输出参数的形式,同时注意类型匹配(用nvarchar(max)替代varchar(max)避免编码问题):

DECLARE @DataBaseName varchar(150) = 'XXXX'
DECLARE @RowList varchar(150) = '1,2,3,4'
DECLARE @MailSubject varchar(250) = CONCAT(@DataBaseName , N' - Execution Report - ' , CURRENT_TIMESTAMP)
DECLARE @QueryResult nvarchar(max)
DECLARE @tableHTML nvarchar(max)

-- 修改动态SQL,将查询结果赋值给@QueryResult输出参数
DECLARE @sSQL NVARCHAR(MAX) = N'SELECT @QueryResult = CAST ((Select 
    td = RowId,       '''',
    td = RunId,       '''',
    td = Description,       '''',
    td = ObjectId,       '''',
    td = ObjectName,       '''',
    td = ExecutionType,       '''',
    td = ExecutionTime,       '''',
    td = StartTime,       '''',
    td = EndTime,       '''',
    td = Status,       '''',
    td = StatusDescription,       '''',
    td = CreationUserId                 
    from ['+@DataBaseName+'].log.vExecutionQueue Where Rowid in ('+ @RowList +')
    FOR XML PATH(''tr''), TYPE
    ) As nvarchar(max) )
    '
-- 执行动态SQL,此时@QueryResult会被正确赋值
EXECUTE sp_executesql @sSQL, N'@QueryResult nvarchar(max) output', @QueryResult output 
select @QueryResult

原因说明

sp_executesql的输出参数需要在动态SQL内部显式赋值,单纯的SELECT返回结果集只会在SSMS里显示结果,但不会自动填充到输出变量中。必须用SELECT @输出参数 = 查询结果的形式,才能让外部变量拿到值。

修改后再执行,@QueryResult就能获取到生成的HTML表格行内容,后续拼接@tableHTML的逻辑就能正常工作了。

内容的提问来源于stack exchange,提问作者CedD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:30:02