ここでの質問は単純です (答えがそうでないことを覚悟していますが)、このクエリをより効率的にするにはどうすればよいでしょうか。
簡単に言えば、レコードをコピーします。X レコードを選択し、それらのレコード データを使用して複製し、新しい識別子を取得します。元のレコードと新しいレコードの ID を使用して、新しい識別子を使用して別のテーブルの元のデータのデータをコピーして挿入します。
これには長い時間がかかります。短くするのを手伝ってくれませんか?
DECLARE DaysToDuplicateCursor CURSOR FAST_FORWARD FOR
SELECT
DayId
FROM [Days]
WHERE AgentId IN ('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX')
AND PersonAgentId IN (
'YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY'
,'WWWWWWWW-WWWW-WWWW-WWWW-WWWWWWWWWWWW'
,'ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ'
,'TTTTTTTT-TTTT-TTTT-TTTT-TTTTTTTTTTTT'
)
DECLARE @Id INT
OPEN DaysToDuplicateCursor
FETCH NEXT FROM DaysToDuplicateCursor INTO @Id
WHILE @@FETCH_STATUS = 0
BEGIN
--
-- Insert Days data.
--
INSERT INTO [Days] (
[DayTemplateId]
,[DayDate]
)
SELECT [DayTemplateId]
,DATEADD(YEAR,-1,[DayDate]) AS [DayDate]
FROM [Days] WHERE [DayId] = @Id
--
-- Insert Periods data.
--
INSERT INTO [Periods] (
[DayId]
,[PeriodTemplateId]
)
SELECT
SCOPE_IDENTITY()
,[PeriodTemplateId]
FROM [Periods] WHERE [DayId] = @Id
--
END
CLOSE DaysToDuplicateCursor
DEALLOCATE DaysToDuplicateCursor