gpt4 book ai didi

sql-server - @@ROWCOUNT 不像我想的那样工作?

转载 作者:行者123 更新时间:2023-12-02 18:49:58 30 4
gpt4 key购买 nike

我正在根据我提前确定的参数运行一组迭代 SQL 查询。执行此 .sql 脚本中的每组查询并将行插入到临时表中。我想做的是在将一行插入临时表后停止其余语句的执行。为此,我在每次插入后检查@@ROWCOUNT 值。如果它是 0,那么我继续执行下一个 INSERT 语句。如果它是 <> 0 那么我想停止。我看到一些有趣的效果,我想知道当我检查它时 @@ROWCOUNT 是否被更改。这是一个基本示例:

create #temptable

INSERT INTO #temptable (...) SELECT a,b..,n FROM TABLE1 where param1=x1 and param2=x2
IF @@ROWCOUNT = 0
INSERT INTO #temptable (...) SELECT a,b..,n FROM TABLE1 where param1=y1 and param2=x2
IF @@ROWCOUNT = 0
INSERT INTO #temptable (...) SELECT a,b..,n FROM TABLE1 where param1=z1 and param2=x2
IF @@ROWCOUNT = 0
INSERT INTO #temptable (...) SELECT a,b..,n FROM TABLE1 where param1=x1 and param2=y2
IF @@ROWCOUNT = 0
INSERT INTO #temptable (...) SELECT a,b..,n FROM TABLE1 where param1=y1 and param2=y2
IF @@ROWCOUNT = 0
INSERT INTO #temptable (...) SELECT a,b..,n FROM TABLE1 where param1=z1 and param2=y2

我看到的是,当第一个插入有行时,它不会执行第二个插入,但它执行第三个​​。然后,它不会执行第四个 INSERT,但会执行第五个,等等。它是否应该停止所有进一步的执行,或者是否有某些范围正在更改?

一旦 INSERT 语句将一行插入到临时表中,有没有办法让此 SQL 停止?

最佳答案

@@ROWCOUNT 会随着执行的每个语句(包括 IF 语句)而重置;这就是为什么当您关心它时,您通常做的第一件事就是将其捕获到一个变量中,以便您可以随后使用该值执行操作,而不必担心它已更改。

UPDATE(无耻的 self 推销,真的):如果你想看到你的 SQL 自动分割成语句(所以在这里你会看到每个 IF/INSERT 组合构成一个语句),你可以通过 SQL Formatter 传递它就像我的PoorSQL.com site - 它将在语句之间放置一个空行! :)

另外:如何处理此问题的快速概述也适用于 @@ERROR:http://www.novicksoftware.com/TipsAndTricks/sql-error-reset-after-every-statement.htm (尽管在 SQL 2005 及更高版本中,您确实应该使用 try/catch 而不是 @@ERROR)

关于sql-server - @@ROWCOUNT 不像我想的那样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6846836/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com