下面的工作......
IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL
DROP TABLE #TestData;
GO
CREATE TABLE #TestData (
ID INT,
col2 INT
);
INSERT #TestData (ID, col2)
SELECT
t.n, c.Col2
FROM
dbo.tfn_Tally(200, 1) t
CROSS APPLY (VALUES (ABS(CHECKSUM(NEWID())) % 10 + 1)) c (Col2);
--=========================================================================================
-- before update values
SELECT
td.ID, td.col2,
COUNT(1) OVER (PARTITION BY td.col2)
FROM
#TestData td
WHERE
td.col2 IN (3, 5);
----------------------------------------------
WITH
cte_Top5 AS (
SELECT TOP 5
td.Col2
FROM
#TestData td
WHERE
td.col2 = 5
ORDER BY
td.ID -- change this to determine which 5 are the top 5, or remove the ORDER BY all together if you don't care and save the sort expense.
)
UPDATE t5 SET
t5.Col2 = 3
FROM
cte_Top5 t5;
----------------------------------------------
-- after update values
SELECT
td.ID, td.col2,
COUNT(1) OVER (PARTITION BY td.col2)
FROM
#TestData td
WHERE
td.col2 IN (3, 5);
爲什麼你需要這個存儲過程?你可以通過運行簡單的查詢來完成它。有什麼特別的理由 –
通過做你所問的問題可能導致骯髒閱讀 –
@UsmanRana我已經相當簡化我原來的問題到這種狀態。我處於通過從多個實例上運行的作業調用的SP強制執行查詢的情況。我注意到TOP 5記錄中的這些UPDATE查詢將會等待其他前面TOP 5記錄的UPDATE查詢,這些查詢是完全不同的。所以我在考慮是否可以優化SP來直接讀取和更新下一個TOP 5記錄,而不是等待。 –