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
答案 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
.......