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

SQL报错137:必须声明标量变量@sql,求脚本问题排查方案

问题解决:SQL Error (137): Must declare the scalar variable "@sql"

报错原因分析

  • 版本兼容问题:如果你的SQL Server版本低于2008,不支持DECLARE @sql nvarchar(MAX) = ''这种变量声明时直接赋值的语法,导致变量未被正确初始化。另外SQL Server 2000及更早版本不支持nvarchar(MAX)类型,会触发MAX未定义的错误。
  • 无匹配数据时的变量状态:如果没有找到列名为id_card_number的默认约束,SELECT @sql += ...语句不会执行,此时@sql会保持NULL状态,执行Sp_executesql时会触发类似“未声明变量”的报错。

修正后的代码

-- 兼容旧版本的变量声明与初始化
DECLARE @sql nvarchar(MAX)
SET @sql = ''

SELECT @sql += 'ALTER TABLE ' + Quotename(tbl.name) + '  DROP CONSTRAINT ' + Quotename(cons.name) + ';'
 FROM SYS.DEFAULT_CONSTRAINTS cons
 JOIN SYS.COLUMNS col ON col.default_object_id = cons.object_id
 JOIN SYS.TABLES tbl ON tbl.object_id = col.object_id
 WHERE col.[name] IN ('id_card_number');

-- 仅当生成有效SQL语句时执行
IF @sql <> ''
    EXEC Sp_executesql @sql

额外适配说明

  • 若使用SQL Server 2000:将nvarchar(MAX)替换为nvarchar(4000)(2000版本不支持MAX类型),如果生成的SQL语句长度超过4000字符,需要额外处理字符串拼接逻辑。
  • 分开声明与赋值的写法,确保在所有支持的SQL Server版本中变量都能被正确初始化,避免版本兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:30:12