0

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
//
4

0 に答える 0