【发布时间】:2016-08-25 20:37:59
【问题描述】:
技术人员--
我这里发生了一个无限循环的情况。为什么@@rowcount 永远不会被设置回0?我一定不明白@@rowcount 的真正作用——或者我将值设置在错误的位置。我认为该值应该在每次通过时递减,直到我最终达到零。
DECLARE @ChunkSize int = 250000;
WHILE @ChunkSize <> 0
BEGIN
BEGIN TRANSACTION
INSERT TableName
(col1,col2)
SELECT TOP (@ChunkSize)
col1,col2
FROM TableName2
COMMIT TRANSACTION;
SET @ChunkSize = @@ROWCOUNT
END -- transaction block
END -- while-loop block
【问题讨论】:
-
scsimon,不,我想在@chunksize 减为零时跳出循环,只是这还没有成功! :)
-
select top(@ChunkSize) 的逻辑是什么?
-
这就像说从 t2 中选择顶部 (250000) 行以插入到 t1。 @@rowcount 是我认为跟踪整个可能结果集的 mssql 引擎变量——但也许不是。
-
好的,现在是 ee... 这更有意义。我马上编辑
-
Table2 中总会有记录,所以它永远不会结束,除非您跟踪该表中已经访问过的行,不是吗?
标签: sql sql-server chunking