在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。
答案 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仅返回true
或false
,因此不会影响任何行,因为它不会选择任何记录。它只检查存在。
由于@@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