2014-01-17 21 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