变量@@rowcount 的值
value of the variable @@rowcount
具有以下 sql 脚本:
declare @table table(id int)
insert into @table values (1),(2)
--print @@rowcount
if 3 < 2
print 'false'
--print @@rowcount
如果我取消注释第一个打印,它将打印值 2,但如果我取消注释最后一个打印,它将打印 0。所以指令 IF
正在影响变量的值@@ROWCOUNT
?或者这个变量的作用域是什么?
我正在使用 sql 服务器 2014。
是的。 @@ROWCOUNT
指的是前面的语句,它不断被重新赋值。这就是为什么它通常用于给变量赋值:
declare @rowcnt int;
<whatever>
set @rowcnt = @@ROWCOUNT;
全局变量@@ROWCOUNT 将return 受最后一条语句影响的行数。 运行 在 INSERT 语句之后,它将 return 2(行)。 运行在IF语句后,会returnIF语句影响的行数,为0。
这也意味着在 SQL 下面的 2 个 @@rowcount 语句 return 2 然后是 0(零),因为第一个 @@rowcount 语句影响零行
declare @table table(id int)
insert into @table values (1),(2)
print @@rowcount
print @@rowcount
documentation for @@ROWCOUNT
给出了它在某些情况下如何工作的示例,但没有具体列出 IF
。
但是,通过一些测试,似乎未执行的 IF
语句 将其重置为 0
。如果您将 IF
视为将 statement/block 包装在其中的语句,那么这是有道理的:
- 如果条件为真,
IF
语句会影响语句中受影响的行数
- 如果条件不成立,并且有一个
ELSE
块,它会影响影响 的语句中的许多行
- 如果条件不成立,并且没有
ELSE
它会影响零行
比较:
DECLARE @TEST TABLE(id INT)
INSERT INTO @TEST VALUES (1),(2),(3)
IF 1 = 2
SELECT * FROM @TEST
PRINT @@ROWCOUNT
-- 0, because block didn't run
IF 1 = 1
SELECT * FROM @TEST
PRINT @@ROWCOUNT
-- 3, i.e. number of rows in SELECT
IF 1 = 2
SELECT TOP 1 * FROM @TEST
ELSE
SELECT TOP 2 * FROM @TEST
PRINT @@ROWCOUNT
-- 2, i.e. number of rows in the SELECT executed in the ELSE clause
具有以下 sql 脚本:
declare @table table(id int)
insert into @table values (1),(2)
--print @@rowcount
if 3 < 2
print 'false'
--print @@rowcount
如果我取消注释第一个打印,它将打印值 2,但如果我取消注释最后一个打印,它将打印 0。所以指令 IF
正在影响变量的值@@ROWCOUNT
?或者这个变量的作用域是什么?
我正在使用 sql 服务器 2014。
是的。 @@ROWCOUNT
指的是前面的语句,它不断被重新赋值。这就是为什么它通常用于给变量赋值:
declare @rowcnt int;
<whatever>
set @rowcnt = @@ROWCOUNT;
全局变量@@ROWCOUNT 将return 受最后一条语句影响的行数。 运行 在 INSERT 语句之后,它将 return 2(行)。 运行在IF语句后,会returnIF语句影响的行数,为0。
这也意味着在 SQL 下面的 2 个 @@rowcount 语句 return 2 然后是 0(零),因为第一个 @@rowcount 语句影响零行
declare @table table(id int)
insert into @table values (1),(2)
print @@rowcount
print @@rowcount
documentation for @@ROWCOUNT
给出了它在某些情况下如何工作的示例,但没有具体列出 IF
。
但是,通过一些测试,似乎未执行的 IF
语句 将其重置为 0
。如果您将 IF
视为将 statement/block 包装在其中的语句,那么这是有道理的:
- 如果条件为真,
IF
语句会影响语句中受影响的行数 - 如果条件不成立,并且有一个
ELSE
块,它会影响影响 的语句中的许多行
- 如果条件不成立,并且没有
ELSE
它会影响零行
比较:
DECLARE @TEST TABLE(id INT)
INSERT INTO @TEST VALUES (1),(2),(3)
IF 1 = 2
SELECT * FROM @TEST
PRINT @@ROWCOUNT
-- 0, because block didn't run
IF 1 = 1
SELECT * FROM @TEST
PRINT @@ROWCOUNT
-- 3, i.e. number of rows in SELECT
IF 1 = 2
SELECT TOP 1 * FROM @TEST
ELSE
SELECT TOP 2 * FROM @TEST
PRINT @@ROWCOUNT
-- 2, i.e. number of rows in the SELECT executed in the ELSE clause