私は現在、パートナーのためにさまざまなタスクを実行することに対してユーザーに報酬を与えることができる小さなシステムを構築しています. パートナー Y のために X を実行すると、Z の金額がユーザーに報酬として与えられます。常に多くの小さなアカウントの動きを転送する代わりに、1 日のすべてのユーザー アクティビティに対して組み合わせたボーナスを提供したいと考えています。
真夜中頃に SQL Server エージェントで実行できるストアド プロシージャを構築したいと考えています。このストアド プロシージャは、ユーザーの収益を合計し、アカウントに追加します。ただし、一度にこの作業を行うことができるユーザーは 1 人だけです。ストアド プロシージャへの 1 回の呼び出しで 100 人のユーザーの収益を管理することは可能ですか?
分解するには、ストアド プロシージャを一度に 1 ユーザーずつ 100 回呼び出すのではなく、1 回の呼び出しで合計 100 ユーザーのトランザクションを処理できるストアド プロシージャが必要です。それは可能ですか?
前もって感謝します!
編集:
ここに私が取り組んできたいくつかのサンプルコードがあります:
ALTER PROCEDURE [dbo].[rewards_dailybonus]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @userid INT = 0
DECLARE @partnerId INT = 0
DECLARE @totalPoints INT = 0
DECLARE @theDate DATETIME = ''
-- This SELECT should return 100 rows
SELECT @userid = userid, @partnerId = partnerId, @totalPoints = SUM(points), @theDate = CAST(created AS DATE)
FROM rewards_movements WITH (NOLOCK)
WHERE
transferred IS NULL
AND
CAST(created AS DATE) != CAST(GETDATE() AS DATE)
GROUP BY userid, partnerId, CAST(created AS DATE)
ORDER BY CAST(created AS DATE), userid ASC
-- For each row from above SELECT, execute another Stored Procedure to add the points to a users account
EXEC registerAccountMovement @userid, @totalPoints, 'Account movement notice'
-- Set the points as transferred
UPDATE rewards_movements SET transferred = GETDATE() WHERE userid = @userid AND partnerId = @partnerId
END