【发布时间】:2017-01-04 09:05:29
【问题描述】:
我正在 SQL Server 2008 中编写一个存储过程,我需要计算受查询影响的行数。
DECLARE
@my_rows AS INT
然后
SELECT *
FROM a table
WHERE some conditions
SET @my_rows=@@ROWCOUNT
如果我将 my_rows 声明为 varchar,它可以正常工作,但如果我声明为 INT,则会收到以下错误:
将表达式转换为数据类型 tinyint 时出现算术溢出错误。
要声明的正确类型是什么?我认为行数只能是整数,并且介于 0 和总行数之间。
【问题讨论】:
-
我测试了你的代码没有任何问题。您确定您已将
@my_rows声明为int而不是tinyint作为异常状态吗? -
好吧,正如 HarshalY 在他的回答中所写,
@@ROWCOUNT的数据类型实际上是int。当我尝试了您的代码(使用实际的 select 语句)时,我没有收到任何错误。您的错误文本表明您将@my_rows声明为tinyint而不是int,也许这就是问题所在。 -
您不会从问题中的代码中得到该错误。请确认这实际上与您正在执行的产生该错误的代码相匹配。
-
是的,INT 是对的。该错误来自我的错误,因为在原始代码中有两个倒排列,因此系统尝试将 varchar 值保存到 tinyint 列中。对不起。
-
根据@Nicolaesse 最后的评论投票决定关闭,因为错字/无法再复制。
标签: sql sql-server sql-server-2008 rowcount