2010-01-24 87 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