[英]In which cases can INNER JOIN (SELECT … not be rewritten using temp table
[英]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
,盡管它們在這種情況下在語義上應該是相同的(除非您觸發了影響UPDATE
中Token
或Id
值的東西)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.