gpt4 book ai didi

sql - 这个查询如何停止?

转载 作者:行者123 更新时间:2023-12-02 00:25:23 26 4
gpt4 key购买 nike

我正在查看 this query 我对一些事情有点困惑。

-- T-SQL large update table
USE tempdb;
SELECT * INTO SOD
FROM AdventureWorks2008.Sales.SalesOrderDetail
GO
--(121317 row(s) affected)

-- SQL update in batches of 10,000
WHILE (2 > 1)
BEGIN
BEGIN TRANSACTION
UPDATE TOP ( 10000 ) SOD
SET UnitPriceDiscount = 0.08,
ModifiedDate = CONVERT(DATETIME,CONVERT(CHAR(10),getdate(),112))
WHERE ModifiedDate < CONVERT(DATETIME,CONVERT(CHAR(10),getdate(),112))

IF @@ROWCOUNT = 0
BEGIN
COMMIT TRANSACTION
BREAK
END
COMMIT TRANSACTION
-- 1 second delay
WAITFOR DELAY '00:00:01'
END -- WHILE
GO

/* Messages

(10000 row(s) affected)

(10000 row(s) affected)

(10000 row(s) affected)

(10000 row(s) affected)

(10000 row(s) affected)

(10000 row(s) affected)

(10000 row(s) affected)

(10000 row(s) affected)

(10000 row(s) affected)

(10000 row(s) affected)

(10000 row(s) affected)

(10000 row(s) affected)

(1317 row(s) affected)

(0 row(s) affected)
*/
-- Cleanup
DROP TABLE SOD
GO

------------
  1. 它正在制作临时表吗? SELECT * INTO SOD 如果是这样,这真的需要吗?我可以只使用 while 部分及以下吗?
  2. IF @@ROWCOUNT = 0 如何变为零?它会做一些自增之类的事情吗?

编辑

这就是我现在所拥有的,但我仍然认为存在无限循环之类的

BEGIN TRAN

declare
@rows_updated int ,
@rowCount int,
@batch_size int
set @rows_updated = -1
set @batch_size = 10000
set @rowCount = 0;

Declare @xx VARCHAR(20) DECLARE @length INT
SET @length = 17 SET @xx = 'XXXXXXXXXXXXXXXX'

while ( @rows_updated != 0 )
begin
update top(@batch_size) myTbl
SET myNumber = SUBSTRING(@xx, 0, @length - len(RIGHT(myNumber, 4))) + RIGHT(myNumber, 4)
WHERE myDate <'2011-Jan-02'
set @rows_updated = @@rowcount
set @rowCount += 10000
print @rowCount
end

ROLLBACK

我数了一下

select count(*) from myTbl
where myDate < '2011-Jan-02'

这会返回计数 1,448,982

我最后打印出来的是 31,110,000

编辑2

我添加了这个,现在它停止了,但它仍然不是 100% 应该在的位置

while (Select Count(*) From myTbl Where myDate  <'2011-Jan-02' ) >=  @rowCount

编辑 3

我认为编辑 2 只是一遍又一遍地执行相同的 10,000 行。

最佳答案

  1. SOD是由 SELECT ... INTO 创建的新表声明,见here
  2. @@ROWCOUNT当先前的 UPDATE 变为 0语句不再更新任何记录,或者换句话说,当 SOD 中的所有记录表格已经更新。

编辑修复第一个答案

关于sql - 这个查询如何停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9037245/

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