簡體   English   中英

選擇更新數據的 ID 哪個更好:加入臨時表或使用 OUTPUT INTO?

[英]Which is better to select IDs of updated data: Join with Temp table or using OUTPUT INTO?

我想選擇更新數據的 ID 並將它們返回給客戶端。 哪種方式更好?

1-使用 OUTPUT INTO

DECLARE @TempE TABLE (  
    Id BIGINT NOT NULL,    
    Token VARCHAR(36) NOT NULL
);

UPDATE [dbo].[MyTable]
   SET [State] = 3  -- Expired
OUTPUT Deleted.[Id], Deleted.[Token]
  INTO @TempE
 WHERE [ExpireDate] < GETDATEUTC();

SELECT Id,
       Token
FROM @TempE;

2-使用臨時表,使用 join 更新

SELECT 
    [E].[Id],
    [E].[Token]
INTO #tempTb
FROM [dbo].[MyTable]
WHERE [ExpireDate] < GETUTCDATE();

UPDATE [M]
SET [M].[State] = 3 -- Expired
FROM [dbo].[MyTable] AS [M]
INNER JOIN #tempTb AS [T] ON [T].[Id] = [M].[Id];

SELECT Id,
       Token
FROM #tempTb;

服務器為SQL Server 2016,預計每次執行更新不超過500行。

謝謝你的幫助 :)

正如我在評論中提到的,這里不需要表變量/臨時表,只需OUTPUT結果集:

UPDATE [dbo].[MyTable]
   SET [State] = 3  -- Expired
OUTPUT inserted.[Id], inserted.[Token]
 WHERE [ExpireDate] < GETDATEUTC();

另外,就我個人而言,我會在這里使用inserted ,而不是deleted ,盡管它們在這種情況下在語義上應該是相同的(除非您觸發了影響UPDATETokenId值的東西)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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