SQL Server给变量赋值表行数时@ROW_COUNT返回NULL问题求助
问题原因与修复方案
- 变量类型与声明缺失:你未声明动态SQL字符串变量
@sql_row_count,同时@ROW_COUNT初始类型定义为nvarchar(1000)不符合计数结果的数值类型要求,应该直接定义为int类型。 - 动态SQL未将计数结果赋值给输出参数:原动态SQL语句仅执行
SELECT COUNT(*)查询,未将查询结果赋值给绑定的输出参数,无法将结果传递到外部变量。 sp_executesql参数绑定规则错误:使用sp_executesql传递输出参数时,必须先明确定义动态SQL的参数列表,再完成外部变量与动态SQL参数的映射,同时显式标注OUTPUT属性。
正确可运行代码示例
-- 提前声明表名变量(如果是存储过程传入可省略该声明) DECLARE @TABLE_NAME sysname = '你的目标表名' -- 声明计数变量,直接用int类型 DECLARE @ROW_COUNT INT -- 声明动态SQL字符串变量 DECLARE @sql_row_count NVARCHAR(1000) -- 动态SQL中将COUNT结果赋值给输出参数@cnt,用QUOTENAME包裹表名避免特殊字符问题 SET @sql_row_count = 'SELECT @cnt = COUNT(*) FROM ' + QUOTENAME(@TABLE_NAME) -- 按规则绑定参数:先定义参数列表,再映射外部变量,标注OUTPUT EXEC sp_executesql @sql_row_count, N'@cnt INT OUTPUT', @cnt = @ROW_COUNT OUTPUT -- 直接获取结果,无需额外类型转换 SELECT @ROW_COUNT
内容的提问来源于stack exchange,提问作者Dorian Daszkiewicz
相关产品推荐
相关产品推荐

