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