以下にヘルプが必要なストアド プロシージャがあります。その目的は、ステージング DB と本番 DB の違いを見つけることです。違いが見つかると、ストアド プロシージャは正しい情報で運用データベースを更新します。問題は、DB 間に複数の違いがある場合があることです。ストアド プロシージャは、DB 間の違いを一度に 1 つしか処理できません。ストアド プロシージャが、見つけた数の違いを処理できるようにしたいと考えています。一度に 1 つの違いしか処理できない場合は、ストアド プロシージャを継続的に実行する必要があります。どんなアイデアや助けも大歓迎です。
`BEGIN TRANSACTION
DECLARE @FILENUM NVARCHAR(30)
SET @FILENUM = ( SELECT TOP 1 B.ID FROM DBO.ABC_FILE_NUMBER F WITH ( NOLOCK )
JOIN DBO.REL_PRIMARY_NUMBER R WITH ( NOLOCK ) ON F.ID = R.FILE_NUMBER_ID
JOIN DBO.ABC_PRIMARY_NUMBER P WITH ( NOLOCK ) ON R.PRIMARY_NUMBER_ID = P.ID
JOIN DBO.STAGINGDATA S WITH ( NOLOCK ) ON F.FILE_NUMBER_ALIAS = S.ID
WHERE S.PRIMARYNUMBER <> P.PRIMARY_NUMBER_ALIAS)
DECLARE @PRIMNUM NVARCHAR(30)
SET @PRIMNUM = ( SELECT DISTINCT P.ID FROM DBO.STAGINGDATA S WITH ( NOLOCK )
JOIN DBO.ABC_PRIMARY_NUMBER P WITH ( NOLOCK ) ON P.PRIMARY_NUMBER_ALIAS = S.PRIMARYNUMBER
WHERE S.ID = ( SELECT F.FILE_NUMBER_ALIAS FROM ABC_FILE_NUMBER WHERE ID = @FILENUM))
UPDATE DBO.REL_PRIMARY_NUMBER
SET PRIMARY_NUMBER_ID = @PRIMNUM
WHERE FILE_NUMBER_ID = @FILENUM
UPDATE DBO.ABC_WORKSPACE
SET PRIMARY_NUMBER_ID = @PRIMNUM
WHERE FILE_NUMBER_ID = @FILENUM
UPDATE DBO.ABC_DOCUMENT
SET PRIMARY_NUMBER_ID = @PRIMNUM
WHERE FILE_NUMBER_ID = @FILENUM
UPDATE DBO.ABC_FILE_NUMBER
SET MODIFIED_TIME = GETDATE(), MODIFIED_BY_ID = '21403'
WHERE FILE_NUMBER_ID = @FILENUM
COMMIT`