Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 变量的值@@rowcount_Sql_Sql Server_Scope_Rowcount - Fatal编程技术网

Sql 变量的值@@rowcount

Sql 变量的值@@rowcount,sql,sql-server,scope,rowcount,Sql,Sql Server,Scope,Rowcount,具有以下sql脚本: declare @table table(id int) insert into @table values (1),(2) --print @@rowcount if 3 < 2 print 'false' --print @@rowcount declare@table表(id int) 插入@表值(1)、(2) --打印@@rowcount 如果3

具有以下sql脚本:

declare @table table(id int)

insert into @table values (1),(2)

--print @@rowcount

if 3 < 2 
    print 'false'

--print @@rowcount
declare@table表(id int)
插入@表值(1)、(2)
--打印@@rowcount
如果3<2
打印“假”
--打印@@rowcount
如果我取消注释第一次打印,它将打印值2,但如果我取消注释最后一次打印,它将打印0。因此指令
是否影响变量
@@ROWCOUNT
的值?或者这个变量的范围是什么


我正在使用sql server 2014。

是<代码>@@ROWCOUNT
引用了上一条语句,并且它不断被重新赋值。这就是为什么它通常用于赋值给变量:

declare @rowcnt int;

<whatever>

set @rowcnt = @@ROWCOUNT;
声明@rowcnt int;
设置@rowcnt=@@ROWCOUNT;
全局变量将返回受上一条语句影响的行数。在INSERT语句之后运行,它将返回2(行)。在IF语句之后运行,它将返回受IF语句影响的行数,即零

这也意味着在下面的SQL中,2@@rowcount语句返回2,然后返回0(零),因为第一个@rowcount语句影响零行

declare @table table(id int)
insert into @table values (1),(2)
print @@rowcount
print @@rowcount
给出了在某些情况下如何工作的示例,但没有具体列出
IF

但是,通过一些测试,似乎未执行的
IF
语句将其重置为
0
。如果将
if
视为一条将语句/块包装在其中的语句,则这是有意义的:

  • 如果条件为true,则
    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