2010-01-24 66 views
-2

我的光标和输出光标在While循环

SET NOCOUNT ON 
DECLARE @vendor_id int, @vendor_name nvarchar(50) 
DECLARE @subvendor_id int, @subvendor_name nvarchar(50) 
PRINT '-------- Vendor Products Report --------' 
DECLARE vend_cursor CURSOR FOR SELECT * FROM MYSEQ 

OPEN vend_cursor 
FETCH NEXT FROM vend_cursor 
INTO @vendor_id, @vendor_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    PRINT ' ' 
    -- Declare an inner cursor based 
    -- on vendor_id from the outer cursor. 
    DECLARE product_cursor CURSOR FOR SELECT * FROM MYSEQ 

    OPEN product_cursor 
    FETCH NEXT FROM product_cursor INTO @subvendor_id,@subvendor_name 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     IF(@subvendor_id >3) 
      SELECT * FROM MYSEQ WHERE SQLID [email protected]_id 
      FETCH NEXT FROM product_cursor INTO @subvendor_id,@subvendor_name 
    END 

    CLOSE product_cursor 
    DEALLOCATE product_cursor 
    -- Get the next vendor. 
    FETCH NEXT FROM vend_cursor INTO @vendor_id, @vendor_name 
END 
CLOSE vend_cursor 
DEALLOCATE vend_cursor 

alt text http://www.freeimagehosting.net/uploads/10f5e2fe4e.png

问题

我在多行值获得答案。我需要像行 的收集这样

4 text4 
5 text5 

(也不应包含重复记录)

编辑:这只是简单的查询。我需要做很多条件。这就是我为什么这样写的原因。

编辑光标

我需要在日期重叠记录...

RowId, CheckIn, CheckOut 
1  10 AM 2 PM 
2  10.30 AM 11.30 AM 
3  8 AM  9 AM 

我只想选择重叠的记录,也有多少重叠的对... 说是为什么我去为多个游标

+0

为什么地球上你想使用CURSOR?这是一个简单的SELECT - 忘记光标! – 2010-01-24 08:35:32

+1

我们需要表结构和样本数据。并接受更多答案! – gbn 2010-01-24 09:38:05

+1

“我需要重叠的日期记录”。 Fnord。此要求与您发布的示例代码无关。如果您不准备花时间正确地构思问题,那么您为什么期望我们花费*我们的时间来尝试解决您的问题? – APC 2010-01-24 10:02:33

回答

0

三件事情发生在我身上。

我认为这是你正在做的一些测试。但是你已经定义了两个游标来执行完全相同的查询。所以这就是为什么你可能会得到重复行的原因之一。当然,在你的问题中缺乏明确的业务逻辑使我们很难理解你想要达到的目标。

第二个是,您有一个嵌套循环,循环遍历另一个表的记录中的一个表的记录。但是你忽略了将由内部游标选择的行与外部游标的当前行结合起来。因此,vend_cursor中的每一行都将获取product_cursor中完全相同的一组行。

最后,product_cursor未按distinct关键字排序或筛选。鉴于前面两点,这可能无关紧要。我只是为了完整而提及它。

+0

@请参阅我的意见 – 2010-01-24 09:02:10

2

忘记SQL中使用游标现在...

在任何一种语言,为什么你会宣布一个内环具有相同的迭代为外循环?在这种情况下,两个游标都基于SELECT * FROM MYSEQ

+0

请参阅我的意见 – 2010-01-24 09:03:21

+0

@BALAMURGAN:同样的答案适用。很明显,你正在迭代**相同的一组记录**。 – gbn 2010-01-24 09:04:56

+0

请参阅编辑光标 – 2010-01-24 09:19:23