2011-08-11 305 views
0

在這裏,我得到了一個場景:當我按客戶端應用程序中的按鈕(用Delphi開發)時,存儲過程被激活。存儲過程首先爲選擇語句聲明一個遊標,該語​​句返回兩列 - BankID和BankCategoryID。然後我需要將遊標內的每一行提取到一條記錄中,並檢查BankCategoryID並根據BankCategoryID返回結果集,如:MS SQL Server 2005中的存儲過程

CASE WHEN fetched_record.BankCategoryID=1 THEN 
    SELECT STATEMENT1 WHEN fetched_record.BankCategoryID=2 THEN 
    SELECT STATEMENT2 and so on... 

然後我將從任何上述情況中檢索到的結果集返回到我的客戶端應用程序。可能嗎?

回答

2

也許你想使用IF作爲光標內的控制語句?

WHILE @@FETCH_STATUS = 0 
BEGIN 
    IF @BankCategoryID=1 
    BEGIN 
     SELECT Baz From Bat; 
     DECLARE @Spam bit; 
     SELECT @Spam = 0; 
    END 

    IF @BankCategoryID=2 
    BEGIN 
     SELECT Foo FROM Bar;  
    END 
    FETCH NEXT FROM MyCursor INTO @BankID, @BankCategory 
END 

這是sample TSQL cursor。您需要將兩列值加載到2個變量中:@BankID@BankCategoryID。即FETCH NEXT FROM MyCursor INTO @BankID, @BankCategoryID

除此之外:我想知道這是否可以完成所有沒有光標?無論哪種情況,上述都應該適用於在遊標的每次迭代中實現更多TSQL語句。

+0

是「fetched_record」。 MS SQL的語法正確嗎?它適用於Oracle,但我不完全知道MS SQL,所以我只是這樣寫的。 –

+0

@Mik:你還需要幫助構建TSQL遊標嗎?如果你用更大的問題更新你的問題,我敢打賭一個遊標是不需要的。如果你喜歡它,請更新你的問題並提供更多詳細信息。 –

+0

那麼我將如何遍歷不帶遊標的結果集? –

相關問題