【问题标题】:What is the correct type for @@ROWCOUNT? [closed]@@ROWCOUNT 的正确类型是什么? [关闭]
【发布时间】: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


【解决方案1】:

根据 MSDN,@@ROWCOUNT 的正确返回类型是 int。

SQL 代码很好,即使 @my_rows 声明为 tinyint 也能正常工作。

【讨论】:

  • 这是一个很好的评论,但答案很差。请尝试将其加厚一点,也许尝试解释为什么 OP 在尝试将 int 值设置为 int 数据类型时出错(正如他所声称的那样)。
  • 如果@my_rows 被声明为tinyint,只要@@ROWCOUNT 返回的值不大于tinyint 的最大值(255),它将正常工作。否则会出现算术溢出错误。
  • @ZoharPeled 是的,我只是在 int 和 tinyint 之间指出两者都可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 2017-12-22
  • 2017-12-19
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
相关资源
最近更新 更多