私はsqlserverを初めて使用し、t-sqlカーソルについて学習しています。
「t-sqlユーザーガイド」という本でカーソル宣言の例を見てきました。
フェッチごとにより多くの行を返すコマンドがあります。
set cursor rows 3 for authors_crsr
Sqlserver2012で試しましたが、機能しませんでした。グーグルで検索してみましたが、うまくいきませんでした。
このコマンドの何が問題になっていますか?たぶん、このコマンドは私が使用しているバージョンから削除されていますか? (2012)
ありがとうございました。
他の人がコメントしているように、このコマンドはSQLサーバーコマンドではありません。ただし、3行を3つの異なる変数セットにフェッチする必要がある場合は、次を使用してフェッチできます。
FETCH ABSOLUTE 1 FROM cursor_name INTO @Variable1;
FETCH ABSOLUTE 3 FROM cursor_name INTO @Variable3;
FETCH ABSOLUTE 2 FROM cursor_name INTO @Variable2;
FETCH ABSOLUTE 1 FROM cursor_name INTO @Variable1;
各FETCHは、常に現在の行をカーソルの位置にリセットすることに注意してください。これには、カーソルを次のように宣言する必要があります:DECLARE cursor_name SCROLL CURSOR FOR ...
。ただし、ここで注意してください。これには、カーソル宣言のSQLステートメントにORDER BYが必要であり、それが重要な場合は、期待される順序でカーソルを確実に受け取ることができます。
最後に、カーソルを使用しないように一生懸命努力してください。特にスクロールが必要なもの。彼らは本質的に邪悪で、黒い魂を持っており、あなたが使うたびにエドガー・コッドは彼の墓にひっくり返ります。 OK、それほど悪くはないかもしれませんが、あなたは私が言っていることを理解します:-)
編集:
実際には、ABSOLUTEキーワードの後に数字の代わりに変数を使用する方が実装が優れているため、ループは次のようになります。
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH ABSOLUTE @Ctr FROM contact_cursor INTO @var1;
SELECT @Ctr = @Ctr + 2
FETCH ABSOLUTE @Ctr FROM contact_cursor INTO @var2;
SELECT @Ctr = @Ctr - 1
FETCH ABSOLUTE @Ctr FROM contact_cursor INTO @var3;
SELECT @Ctr = @Ctr - 1
FETCH ABSOLUTE @Ctr FROM contact_cursor INTO @var1;
--Increment the counter
SELECT @Ctr = @Ctr + 1
END