[英]Getting Record Value while Looping through a Temporary Table
場景 :
樣品 :
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
挑戰 :
更新資料
為什么循環?
Delete From [Table B]
Where [CustomerID] in (Select CustomerID from TableA where SomeCondition=true)
確定,然后支持多個刪除。 您可以保持表格可變
DECLARE @CustomerList TABLE (CustomerID bigint)
INSERT INTO @CustomerList SELECT CustomerID FROM TableA WHERE CustomerID = @ParameterID
Delete From [Table B] Where [CustomerID] in (Select CustomerID from @CustomerList)
Delete From [Table C] Where [CustomerID] in (Select CustomerID from @CustomerList)
為什么不使用join,而不是使用join。 像下面這樣。
DELETE t
FROM TableB as t
join @CustomerList as c
on t.CustomerID = C.CustomerID;
我不確定為什么需要臨時表或循環。 聯接應該起作用。
例:
DELETE B
FROM TableB B
INNER JOIN TableA A
ON B.CustomerID=A.CustomerID
WHERE A.CustomerID = @ParameterID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.