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

调用sp_executesql执行动态SQL未赋值@Set变量的报错问题

SQL运行报错/返回NULL问题成因分析

问题SQL代码如下:

declare @Field as varchar(10); 
declare @Set as varchar(10); 
set @Field = 'id_fonte' 

declare @sql nvarchar(max)
set @sql = 'select ' + @Set + ' = id_fonte 
              from fontes
             where [' + replace(@Field, '''', '''''') + '] = 54';

exec sp_executesql @sql

具体成因

  • SQL Server中仅完成声明、未显式赋值的变量默认值为NULL,上述代码里的@Set变量没有执行任何SET赋值操作,初始值为NULL。
  • T-SQL的字符串拼接规则为:只要拼接项中存在NULL值,整个拼接结果就会返回NULL。代码拼接@sql变量时用到了值为NULL的@Set,导致最终生成的@sql整体值为NULL。
  • 系统存储过程sp_executesql接收的SQL参数为NULL时,会直接触发执行报错,或者无有效返回结果,最终表现为返回NULL或执行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:51:04