以下は動作します...
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クエリを待っていることに気付きました。だから私は、待つのではなく、次のTOP 5レコードを直接読み込んで更新するようにSPを最適化できるかどうかを考えていました。 –