サービス レコードを保持する SQL Server データベースがあります。各サービス レコードにはサービス ID があります。サービス ID は、日付、クライアント番号、サービス担当者、およびその日の注文ごとに 1 ずつ増加する増分ピースで構成されます。また、当社のサービス技術者はどのサイトでも複数のサービス レコードを持つことができるため、サービス ID にはメイン サービス ID も割り当てられています。メイン サービス ID は、そのサイトの最初のサービス ID です。そのため、そのサイトで行われているサービスが 1 つだけの場合、サービス ID とメイン サービス ID は同じである可能性があります。複数のサービスが実行されている場合、サービス ID とメイン サービス ID は異なります。
サービスIDにギャップがあるかどうかを確認することを任されました。そこで、メイン サービス ID ごとに最も低いサービス ID を特定するクエリを作成しました。各セクションのサービス ID とメイン サービス ID の間のすべてのサービス ID を生成する方法が必要です。これを行う別の方法が思いつかないため、カーソルを使用しています。だから私の質問は、私がやろうとしていることを行うためのより良い方法がなければならないということです. 誰かが私を正しい方向に向けることができますか?
これが私のカーソルです:
DECLARE @ServiceID as Varchar(12),
@ MainServiceID as Varchar(12),
@TempSCR as Varchar(12)
DECLARE db_RecSet CURSOR FOR
SELECT [ServiceID], Max([MainServiceID]) as MainServiceID
FROM Service_Table
WHERE MainServiceID like '12%'
AND [MainServiceID] <> [ServiceID]
GROUP BY [ServiceID]
OPEN db_RecSet
FETCH NEXT db_RecSet INTO @ServiceID, @ MainServiceID
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @TempSCR = @ServiceID
WHILE @TempSCR <= @ MainServiceID
BEGIN
INSERT INTO [Temp_Identifiy_Possible_SCRHeader](ServiceID, MainServiceID)
VALUES (@TempSCR, @ MainServiceID)
SET @TempSCR = @TempSCR +1
END
FETCH NEXT FROM db_RecSet INTO @ServiceID, @ MainServiceID
END
CLOSE db_RecSet
DEALLOCATE db_RecSet