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
相关产品推荐
相关产品推荐

