簡體   English   中英

遍歷臨時表時獲取記錄值

[英]Getting Record Value while Looping through a Temporary Table

場景

  1. 從一個TableA中選擇記錄
  2. 遍歷表值
  3. 根據每個記錄的值從另一個表(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值

更新資料

  • 想要使用循環的原因是要執行多個delete語句

為什么循環?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM