2011-08-11 16 views
0

ここで私はシナリオを得ました。クライアントアプリケーション(Delphiで開発された)のボタンを押すと、ストアドプロシージャがアクティブになります。ストアドプロシージャは、まず2つの列、BankIDとBankCategoryIDを返すselect文のカーソルを宣言します。カーソル内の各行をレコードにフェッチし、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の2つの変数に読み込みます。すなわちFETCH NEXT FROM MyCursor INTO @BankID, @BankCategoryID

脇:これはカーソルなしですべて行うことができますか?どちらの場合でも、カーソルの各反復で、より多くのTSQLステートメントを実装する上で、上記は役に立ちます。

+0

"fetched_record"ですか?構文MS SQLの場合はtrue?それはオラクルのためですが、私はMS SQLを正確には知らないので、私はそれをそのまま書きました。 –

+0

@Mik:TSQLカーソルの作成にも助けが必要ですか?大きな問題で質問を更新した場合は、カーソルが必要ないと確信しています。あなたがそれを試しているなら、あなたの質問をより詳細に更新してください。 –

+0

次に、カーソルのない結果セットをどのように反復しますか? –

関連する問題