1 つのマスター テーブルから ID を取得し、その値に基づいて 2 つの異なるテーブルから値を取得し、これらの値を使用して 3 番目のテーブルに更新/挿入する必要がある状況があります。
マスター テーブルのレコードをループするためにカーソルを使用していますが、これがパフォーマンスの問題につながっているように感じます。これが CTE を使用して実行できるかどうかを知りたかったのです。CTE を使用してみましたが、再帰的ではなく、どこが間違っているのか完全にわかりません。
これが私のストアドプロシージャの方法です-
//
BEGIN
declare @variables char(10);
DECLARE @cursor CURSOR; --DECLARE CURSOR
SET @cursor = CURSOR FOR -- SET CURSOR
-- pull in value for curso
OPEN @cursor
FETCH NEXT
FROM @cursor INTO @variables --FILL IN CURSOR TO LOOP THROUGH
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN
--PUll values from table 1
END
BEGIN
--Pull values from table 1
-- Do some maths on the values pulled
END
BEGIN
--function/sql to update or insert
END
FETCH NEXT
FROM @cursor INTO @variables;
END
CLOSE @cursor;
DEALLOCATE @cursor;
END
//
CTEを使用すると、私のコードは-
//
;WITH CTE AS
(
--pull values from master table
)
BEGIN
BEGIN
-- pull values from table 1
END
BEGIN
-- Pull values from table 2, do the calculations
END
BEGIN
-- insert or update as needed.
END
//