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
你能解釋爲什麼SellerNo1和SellerNo2呢?我很困惑,因爲兩者似乎都指向了同一個seller_no列。 – user1863490
此查詢發生在CURSOR內部 - CURSOR正在遍歷數據集。用自然語言舉個例子;你正在購買一輛汽車,推銷員會帶你通過他所有的汽車。我們可以隨時撥打您正在查看Car1的汽車和您之前看過的Car2 Car2。這是否更有意義?如果不是,我不確定我瞭解你的問題。 – MarkD
從我得到的有限信息來看,你似乎有正確的答案。我無法包裹我的頭。特別是下面的數據部分發生了什麼,因爲它發生在遊標內部。爲什麼設置strSellerNo2 = null,然後立即使seller_no = strSellerNo2。我無法理解它背後的邏輯。 'SET @ strSellerNo2 = NULL 'SELECT @ strSellerNo2 = Seller_No' – user1863490