在IF EXISTS语句之前使用@@ ROWCOUNT时总是获得0行

时间:2014-05-21 06:29:32

标签: sql sql-server

在IF EXISTS之后使用@@ROWCOUNT时,我总是0,为什么

这是我的代码:

IF EXISTS (SELECT TOP 1 1 FROM MyTable) --Returns one row.
    SELECT @@ROWCOUNT; --Returns always 0

我知道该声明现在不符合逻辑,因为我希望它始终打印1,所以我也可以SELECT 1,但它只是为了证明问题。问题是它不打印1,它总是打印0。

3 个答案:

答案 0 :(得分:3)

  SELECT TOP 1 1 FROM Provider.Site
  SELECT @@ROWCOUNT; --Returns 1

IF EXISTS (SELECT TOP 1 1 FROM Provider.Site) --Returns one row.
    SELECT @@ROWCOUNT; --Returns always 0

此处首先@@ROWCOUNT返回1,第二个返回0.

由于EXISTS仅返回truefalse,因此不会影响任何行,因为它不会选择任何记录。它只检查存在。

由于@@ROWCOUNT returns the number of rows affected by the last statement第二种情况将为0

答案 1 :(得分:2)

@@ ROWCOUNT默认为0 SELECT @@ ROWCOUNT; --Returns总是0

IF LOOP中的SELECT会将@@ ROWCOUNT更改为1 但在那之后,IF EXISTS条件会再次将@@ ROWCOUNT更改为0,这就是你总是得到0的原因。 SELECT的范围不再存在。

答案 2 :(得分:1)

如果您想让表的行数不为空,您可以查询

DECLARE @RC INT;
SELECT @RC = COUNT(*) FROM table
IF(@RC > 0)
    PRINT @RC