更新Cursors中的null和相关值

时间:2014-01-24 07:54:47

标签: sql sql-server sql-server-2005

脚本运行之前

Seller_No   |Product_No|Product_Status |
99999       |100000    |Availalble     |
88888       |100000    |Null           |

预期结果

Seller_No   |Product_No|Product_Status |
99999       |100000    |Removal        |
88888       |100000    |Available      |

我有以下脚本。我需要使用光标。这将始终是一个小批量,因此不用担心系统的开销。

情况是我们改为新卖家。我想将新卖家标记为“可用”,同时将旧卖家更改为“删除”。

以下是目前为止的脚本。我一直在使用null值来搜索正确的行。但是,在新项目“可用”之前,我必须以某种方式找到旧的make null。是否可以在光标内完成所有这些操作?

    USE [OutletRetail]
    GO
    /****** Object:  StoredProcedure [Outlet].[sp_UpdateProductStatus]    Script Date: 01/16/2014 19:58:47 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER OFF
    GO

    --Updates Product status codes to Available if NULL
    ALTER   PROCEDURE [Outlet].[sp_UpdateProductStatus]
    AS

    DECLARE @strProductNo varchar(20)
    DECLARE @strSellerNo1 varchar(10)
    DECLARE @strSellerNo2 varchar(10)


    DECLARE UpdateProductCursor CURSOR FOR

        SELECT Product_No, Seller_No
        FROM Outlet.tblProductMaster
        WHERE Product_Status IS NULL

    OPEN UpdateProductCursor
    FETCH NEXT FROM UpdateProductCursor INTO @strProduct_No, @strSellerNo1

    WHILE @@FETCH_STATUS = 0

    BEGIN

        SET @strSellerNo2 = NULL

        SELECT  @strSellerNo2 = Seller_No
        FROM    Outlet.tblProductMaster
        WHERE   Product_No = @strProductNo
            AND Seller_No <> @strSellerNo1
            AND Product_Status = 'Available'


    IF (@strSellerNo2 IS NULL)
    BEGIN
            UPDATE Outlet.tblProductMaster
            SET Product_Status = 'Available'
            WHERE Product_No = @strProductNo
                AND Seller_No = @strSellerNo1
        END

1 个答案:

答案 0 :(得分:0)

找到@strSellerNo2后,您可以将旧的seller_No(99999)更新为Product_Status = null

 ........



     SET @strSellerNo2 = NULL

    SELECT  @strSellerNo2 = Seller_No
    FROM    Outlet.tblProductMaster
    WHERE   Product_No = @strProductNo
        AND Seller_No <> @strSellerNo1
        AND Product_Status = 'Available'

  IF(@strSellerNo2 is not null)
  BEGIN
      update Outlet.tblProductMaster
      set Product_Status  = null
      where Seller_No    = @strSellerNo2 
  END

  .......