2014-01-17 18 views
1

我很努力地理解下面的代码段,因为它涉及到整个脚本。有人能用简单的英语向我解释下面的代码部分吗?为什么有,看起来像一个'Seller_No'列的2个声明变量?2 SQL中同一列的变量

SET @strSellerNo2 = NULL 

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

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 


UPDATE Outlet.tblProductMaster 
SET Product_Status = 'Not Available' 
WHERE Product_No = @strProductNo 
     AND Seller_No <> @strSellerNo2 
     AND Product_Status IS NULL 

    FETCH NEXT FROM UpdateProductCursor INTO @strProductNo, @strSellerNo1 
END 

CLOSE UpdateProductCursor 
DEALLOCATE UpdateProductCursor 

回答

2

希望这有助于;

SELECT @strSellerNo2 = Seller_No  -- Find me the Seller Number 
FROM Outlet.tblProductMaster   -- In the tblProductMaster table 
WHERE Product_No = @strProductNo  -- where the product number is the product we're looking for 
    AND Seller_No <> @strSellerNo1  -- and the Seller Number is not the Seller Number previously found 
    AND Product_Status = 'Available' -- and the Product Status is "Available" 
+0

你能解释为什么SellerNo1和SellerNo2呢?我很困惑,因为两者似乎都指向了同一个seller_no列。 – user1863490

+0

此查询发生在CURSOR内部 - CURSOR正在遍历数据集。用自然语言举个例子;你正在购买一辆汽车,推销员会带你通过他所有的汽车。我们可以随时拨打您正在查看Car1的汽车和您之前看过的Car2 Car2。这是否更有意义?如果不是,我不确定我了解你的问题。 – MarkD

+0

从我得到的有限信息来看,你似乎有正确的答案。我无法包裹我的头。特别是下面的数据部分发生了什么,因为它发生在游标内部。为什么设置strSellerNo2 = null,然后立即使seller_no = strSellerNo2。我无法理解它背后的逻辑。 'SET @ strSellerNo2 = NULL 'SELECT @ strSellerNo2 = Seller_No' – user1863490