sql >> データベース >  >> RDS >> Sqlserver

別のテーブルのカーソル内の値に基づく 1 つのテーブルの SQL 更新

    最初の更新の前に 2 つのフェッチを行います。次のようにループを再構築してみてください:

    DECLARE @so VARCHAR(50)
    DECLARE @line VARCHAR(50)
    DECLARE @pdate DATETIME
    DECLARE @reason1 VARCHAR(50)
    DECLARE @reason2 VARCHAR(50)
    DECLARE @area VARCHAR(50)
    
    DECLARE mycursor CURSOR LOCAL FAST_FORWARD FOR 
    SELECT [bp_so_number],[bp_line],[bp_production_date],[bp_reason1],[bp_reason2],[bp_area]
     FROM [Workflow].[dbo].[v_OTD_PostSrc]
    
     OPEN mycursor
     -- Always true
     WHILE 1 = 1
     BEGIN
        -- Get next record from cursor
        FETCH NEXT FROM mycursor
                   INTO @so, @line, @pdate, @reason1, @reason2, @area;
        -- If there was a record @@fetch_status will be 0; 
        -- if not, or in case of an error, break the loop
        IF @@FETCH_STATUS <> 0
           break
        UPDATE otd_data SET [email protected], [email protected], [email protected] 
        WHERE [Order Number][email protected] AND [email protected] AND [Schedule Date][email protected] AND [Qty Open]>0
        --SELECT * FROM otd_data WHERE [Order Number][email protected] AND [email protected] AND [Schedule Date][email protected]
     END
    
    CLOSE mycursor
    DEALLOCATE mycursor
    

    LOCAL および FAST_FORWARD オプションをカーソルに移動します。 FAST_FORWARD に関するドキュメント:




    1. グループ化における最小値のOracle分析関数

    2. Mysqlドライバーの問題

    3. PDOはMySQLデータベースに単純な配列を挿入します

    4. Oracleの数値関数(全リスト)