sql >> データベース >  >> RDS >> Sqlserver

カーソル内のカーソル

    さまざまな問題を抱えています。まず、特定の @@FETCH_STATUS 値を使用しているのはなぜですか? @@FETCH_STATUS =0 にする必要があります。

    第二に、内側のカーソル into を選択していません。 なんでも。そして、このようにすべてのフィールドを選択するような状況は考えられません - スペルアウトしてください!

    これがサンプルです。フォルダーには、Attend の外部キーでもある「ClientID」の主キーがあります。フォルダの ClientID ごとに分類されたすべての参加 UID を出力しているだけです:

    Declare @ClientID int;
    Declare @UID int;
    
    DECLARE Cur1 CURSOR FOR
        SELECT ClientID From Folder;
    
    OPEN Cur1
    FETCH NEXT FROM Cur1 INTO @ClientID;
    WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT 'Processing ClientID: ' + Cast(@ClientID as Varchar);
        DECLARE Cur2 CURSOR FOR
            SELECT UID FROM Attend Where [email protected];
        OPEN Cur2;
        FETCH NEXT FROM Cur2 INTO @UID;
        WHILE @@FETCH_STATUS = 0
        BEGIN
            PRINT 'Found UID: ' + Cast(@UID as Varchar);
            FETCH NEXT FROM Cur2 INTO @UID;
        END;
        CLOSE Cur2;
        DEALLOCATE Cur2;
        FETCH NEXT FROM Cur1 INTO @ClientID;
    END;
    PRINT 'DONE';
    CLOSE Cur1;
    DEALLOCATE Cur1;
    

    最後に、よろしいですか ストアドプロシージャでこのようなことをしたいですか?ストアド プロシージャを悪用するのは非常に簡単で、問題の特徴付けに問題が反映されることがよくあります。たとえば、私が示したサンプルは、標準の選択呼び出しを使用してはるかに簡単に実現できます。



    1. WEEKOFYEAR()の例– MySQL

    2. 複数の行の値に一致する外部キーを検索する

    3. MySQLでデータベース名の大文字と小文字を変更するにはどうすればよいですか?

    4. Oracleのミリ秒単位のタイムスタンプの違い