1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
-- 建立表
select top(0) sod.SalesOrderID,
sod.SalesOrderDetailID,
sod.ProductID,
sod.UnitPrice
Into #SalesOrderNeedUpdate
From Sales.SalesOrderDetail as sod;
alter table #SalesOrderNeedUpdate add constraint PK_#SalesOrderNeedUpdate PRIMARY KEY (SalesOrderDetailID, SalesOrderID)
set identity_insert #SalesOrderNeedUpdate on
-- 初始化表数据
insert into #SalesOrderNeedUpdate(SalesOrderID, SalesOrderDetailID, ProductID, UnitPrice)
select sod.SalesOrderID,
sod.SalesOrderDetailID,
sod.ProductID,
0
from Sales.SalesOrderDetail as sod;
-- 更新数据
update #SalesOrderNeedUpdate
set UnitPrice = p.ListPrice
from #SalesOrderNeedUpdate as sonu
join Production.Product as p on p.ProductID = sonu.ProductID
-- 创建分页数据临时表
select top 0 sod.SalesOrderID,
sod.SalesOrderDetailID,
sod.UnitPrice
into #SalesOrderPagedData
from Sales.SalesOrderDetail as sod
-- set identity_insert #SalesOrderPagedData on
while exists(select 1 from #SalesOrderNeedUpdate)
begin
-- 插入分页数据表
insert into #SalesOrderPagedData(SalesOrderID, SalesOrderDetailID, UnitPrice)
select top 3000 sonu.SalesOrderID,
sonu.SalesOrderDetailID,
sonu.UnitPrice
from #SalesOrderNeedUpdate as sonu
-- 更新实际表
update sod
set sod.UnitPrice = sopd.UnitPrice
from Sales.SalesOrderDetail as sod
join #SalesOrderPagedData as sopd
on sod.SalesOrderDetailID = sopd.SalesOrderDetailID and
sod.SalesOrderID = sopd.SalesOrderID
-- 在总的更新数据表中删除已更新的数据
delete sonu
from #SalesOrderNeedUpdate as sonu
join #SalesOrderPagedData as sopd
on sopd.SalesOrderDetailID = sonu.SalesOrderDetailID and
sopd.SalesOrderID = sonu.SalesOrderID
end
|