2011-02-25 28 views
0

我試圖使用遊標來動態生成結果集。以下是代碼在while循環內聯合select語句T-SQL

 DECLARE   @ MilestoneName VARCHAR(100), 
     @MilestoneSts VARCHAR(100), 
     @ProjectPre VARCHAR(10), 
     @ProjectID  VARCHAR(10), 
     @Center  VARCHAR(20), 
     @CenterPre  VARCHAR(20), 
     @Source  VARCHAR(20), 
     @Actual  INT; 

SET @MilestoneName = null; 
SET @MilestoneSts = null; 
SET @ProjectPre = null; 
SET @CenterPre = null; 

DECLARE s_cursor CURSOR FOR 
SELECT ProjectID, Center, Source, Actual 
FROM #MILESTONE 


OPEN s_cursor 
FETCH NEXT FROM s_cursor INTO @ProjectID, @Center, @Source, @Actual 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    SELECT @@FETCH_STATUS sts, @ProjectID PID, @Center Center, @Source Source, @Actual Actual 
    FETCH NEXT FROM s_cursor INTO @ProjectID, @Center, @Source, @Actual 
END 

CLOSE s_cursor 
DEALLOCATE s_cursor 

但是使用我能夠產生79個結果單行,但我想聯盟所有的行成一個結果..任何可能的解決方案將高度讚賞..

+0

不會'選擇專案編號,中心,資料來源,實際FROM#MILESTONE'你需要什麼? - 即爲什麼你要逐行處理,然後再將這些行重新連接在一起?我認爲這可能是您實際需求的簡化。如果是這樣,你能告訴我們這些是什麼,所以我們可以看到是否可以避免光標。 – 2011-02-25 15:37:32

+0

雖然我從'@ProjectPre'猜測你正在用前一行的值做一些事情。你可以插入一個tabgle變量,然後從最後選擇。或者你可能想解釋你做得更好,所以我們可以提出替代方案。 – 2011-02-25 15:51:27

回答

0

只是檢查,爲什麼你用這個遊標?

此存儲過程可以通過只是說

SELECT ProjectID, Center, Source, Actual 
FROM #MILESTONE 

但是,也許我在這裏失蹤服用點被取代?

如果有你在你的代碼看看這個帖子冷落邏輯:Multi-statement Table Valued Function vs Inline Table Valued Function

GJ

+0

我的主管給了我他的代碼的簡化版本,並要求我找出一種方法來聯合這些結果..他從其他兩個表中獲取數據到#milestones中,並希望在結果被公開之前協調字段.. – Avinash 2011-02-25 16:03:22

+1

那麼回答你的問題是創建一個表變量,你可以逐一插入行,然後從表中返回evrything,但我不認爲你問的是正確的問題。我不認爲你需要一個遊標,它是一個數據庫,而不是一種正常的感恩語言。如果你能告訴我們這兩張表是什麼,並解釋需要做什麼,我們可以爲你做更多的事情。 – gjvdkamp 2011-02-25 16:06:13

+0

沒有理由爲此使用遊標。 http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM 2011-02-25 16:15:58