我有一个巨大的存储过程,我正在尝试优化它。
我有一个临时表A,列Id。
我有一个主表 B,其中包含Id列和一个布尔字段Test
对于表 A 中的所有 Id,我需要使表 B 中的 Test = 1。
例子: 一个
Id
--
1
2
3
我需要按如下方式获取表 B。我已经在表 B 中有 Id 字段,我只需要更新测试列 B
Id Test
-- ----
1 1
2 1
3 1
4
5
6
我目前正在使用 while 循环遍历 Table A,并且对于每个 Id 我正在更新 Table B中的 Test 列。
WHILE (1 = 1)
BEGIN
-- Exit loop if no more Transactions
IF @@ROWCOUNT = 0 BREAK;
Update [B]
set Test = 1
where Id = (SELECT TOP 1 Id
FROM #B
WHERE Id > @Id1
ORDER BY Id)
END
PS:@Id1 是存储过程的输入参数。
我想不出任何其他有效的方法,但是我的查询需要很长时间才能运行。如果有更好的方法来做同样的事情,请告诉我。