非常に複雑なクエリを持つビューがあります (以下を参照)。次に、このビューを使用してデータを別のテーブルに挿入します。データベースに大量のデータがあり、挿入クエリを実行すると、8 時間実行され、最後にのみ実際の挿入が行われます。最初にビューからすべての結果を取得してから、それらをテーブルに挿入するようです。各レコードを個別に挿入することはできますか?
ビューは次のとおりです。
CREATE VIEW [dbo].[Enrollment]
AS
WITH CTE AS (SELECT RN = ROW_NUMBER() OVER (PARTITION BY PRIMARYPROVIDERCODE, CLIENTNUMBER
ORDER BY PRIMARYPROVIDERCODE, CLIENTNUMBER, STARTINGDATE), ID, PRIMARYPROVIDERCODE, CLIENTNUMBER, STARTINGDATE, ENDINGDATE
FROM AUTHORIZE
WHERE DOCREVNO = 0 AND CMT = 'N'
GROUP BY PRIMARYPROVIDERCODE, CLIENTNUMBER, STARTINGDATE, ENDINGDATE, ID)
SELECT [Current Row].ID, [Current Row].RN, [Current Row].PRIMARYPROVIDERCODE, [Current Row].CLIENTNUMBER, [Current Row].STARTINGDATE,
ENDINGDATE =
(SELECT TOP 1 [Next Ending].ENDINGDATE
FROM CTE[Next Ending]
WHERE [Next Ending].RN >= [Current Row].RN AND [Next Ending].ENDINGDATE IS NOT NULL AND
[Next Ending].PRIMARYPROVIDERCODE = [Current Row].PRIMARYPROVIDERCODE AND
[Next Ending].CLIENTNUMBER = [Current Row].CLIENTNUMBER
ORDER BY [Next Ending].RN)
FROM CTE[Current Row] INNER JOIN
CTE[Previous Row] ON ([Previous Row].PRIMARYPROVIDERCODE = [Current Row].PRIMARYPROVIDERCODE AND
[Previous Row].CLIENTNUMBER = [Current Row].CLIENTNUMBER) AND (([Previous Row].RN = [Current Row].RN AND [Current Row].RN = 1) OR
([Previous Row].RN = [Current Row].RN - 1 AND [Previous Row].ENDINGDATE IS NOT NULL))
INSERT クエリは次のとおりです。
INSERT INTO [dbo].[clientenrollment]
([DOCSERNO]
,[DOCREVNO]
,[USERID]
,[SIGNED]
,[TIMESTAMP]
,[ClientNumber]
,[enrollmentdate]
,[terminationdate]
,[PrimaryProviderCode]
,[Action]
,[Providername]
,[SERVICEMAPCODE])
SELECT REPLACE(STR(6620100322000000 + row_number() over (order by ev.ID asc), 17, 0), ' ', '0')
,0
, NULL
, 0
, GETDATE()
,ev.CLIENTNUMBER
,ev.STARTINGDATE
,ev.ENDINGDATE
,ev.PRIMARYPROVIDERCODE
,auth.ACTION
,p.PROVIDERNAME
,ms.MapCode
FROM [dbo].[Enrollment] AS ev
JOIN AUTHORIZE auth ON auth.ID = ev.ID
LEFT JOIN MasterService ms ON ms.Code = auth.SERVICECODE
LEFT JOIN PROVIDER p ON p.PROVIDERCODE = ev.PRIMARYPROVIDERCODE
WHERE p.DOCREVNO = 0