如何在SQL中将rowcount设置为零

时间:2014-03-06 09:30:00

标签: sql sql-server sql-server-2008

任何人都知道如何在SQL中再次将rowcount设置为零。

我使用rowcount来获取插入语句中插入的记录数。我必须再次使用rowcount来查找更新的行。所以我想再次将rowcount重置为零。

代码将是这样的:

INSERT INTO Table A ......

INSERT INTO statistics (id,inserted_records ) values (1,@@rowcount) 

---一些操作 -

Update Table A ....

Update statistics set updated_records=@@rowcount where id=

3 个答案:

答案 0 :(得分:1)

@bibinmatthew @@ ROWCOUNT会在您进行其他交易时自动重置。

我会考虑做的是

declare @rowsAffected int
insert into table A ...
select @rowsAffected = @@ROWCOUNT

insert into table statistics (id, inserted_records) values (iID, @rowsAffected)

declare @rowsAffected int
update table A ... 
select @rowsAffected = @@ROWCOUNT

update table statistics set updated_records = @rowsAffected where id = iID

这样,您无需直接处理@@ ROWCOUNT变量。我已经创建了@rowsAffected两次因为我假设你在不同的存储过程中有插入和更新脚本<​​/ p>

答案 1 :(得分:0)

 select @@rowcount 

仅返回最近语句中的行计数。 无需重置。。执行另一个语句将自动重置它。

如果由于某些奇怪的原因,您希望使@@rowcount返回0,则执行将返回0行的查询。

select 1 where 2=3

你可以证明这一点。

declare @t table (i int)
declare @stats table(rc int)

insert @t values (1),(2),(3)
-- rowcount is 3
insert @stats values (@@rowcount)
-- rowcount is 1
update @t set i=5 where i=4 
select @@ROWCOUNT -- rowcount will be 0

答案 2 :(得分:0)

有关rowcount的信息在这里:

http://technet.microsoft.com/en-us//library/ms187316.aspx

  

诸如USE,SET,DEALLOCATE CURSOR,CLOSE CURSOR之类的陈述,   BEGIN TRANSACTION或COMMIT TRANSACTION将ROWCOUNT值重置为0

所以也许你可以将这些陈述放入一个交易中,这样它们就可以更好地相互隔离。

您可以随时发送不更新任何内容的请求,例如UPDATE mytable SET x=1 WHERE 0=1;