【发布时间】:2017-02-04 07:54:13
【问题描述】:
场景:
- 从一个 TableA 中选择记录
- 循环遍历表值
- 根据每条记录的值从另一个表(TableB)中删除
示例:
DECLARE @CustomerList TABLE (CustomerID bigint)
INSERT INTO @CustomerList SELECT CustomerID FROM TableA WHERE CustomerID = @ParameterID
WHILE (SELECT COUNT(*) FROM @CustomerList) > 0
BEGIN
DELETE FROM [TableB]
WHERE [CustomerID] = @CustomerList.CustomerID -- challenge
END
挑战:
- 传递每个循环的 CustomerID 值
更新
- 想使用循环的原因是要执行多个删除语句
【问题讨论】:
-
运行多次删除不是使用循环的正当理由。如果您需要多次删除,只需编写多次删除的代码。这样做是一个循环是完全错误的方法。
-
@SeanLange,你能检查一下约翰的答案吗……至少从编码背景与 sql 的角度来看,它在我看来在逻辑上是正确的。为每个删除语句重复相同的选择语句听起来效率低下。
-
我会使用连接,但无论哪种方式都比使用循环更高效!!!
-
@SeanLange,我同意......他甚至没有使用我刚刚意识到的循环
标签: sql sql-server tsql