検索
ホームページphp教程PHP开发SQLSERVER カーソルおよびループ ステートメント

カーソルに関して整理すると、MSDN には次の内容があります:

Transact-SQL サーバー カーソルを介して特定の行を取得します。

Parameters

NEXT

は、現在の行の直後に結果行を返し、現在の行は返された行にインクリメントされます。 FETCH NEXT がカーソルに対する最初のフェッチ操作である場合、結果セットの最初の行が返されます。 NEXT は、デフォルトのカーソル抽出オプションです。

PRIOR

現在の行の直前の結果行を返し、現在の行は返された行に減らされます。 FETCH PRIOR がカーソルに対する最初のフェッチ操作である場合、行は返されず、カーソルは最初の行の前に配置されます。

FIRST

カーソルの最初の行を返し、それを現在の行にします。

LAST

カーソルの最後の行を返し、それを現在の行にします。

ABSOLUTE { n | @nvar}

n または @nvar が正の場合、カーソルの先頭から n 番目の行を後方に返し、返された行を新しい現在の行にします。 n または @nvar が負の場合、カーソルの末尾から前方に n 番目の行を返し、返された行を新しい現在の行にします。 n または @nvar が 0 の場合、行は返されません。 n は整数定数である必要があり、@nvar のデータ型は smallint、tinyint、または int である必要があります。

RELATIVE { n | @nvar}

n または @nvar が正の場合、現在の行から始まる n 番目の行を返し、返された行を新しい現在の行にします。 n または @nvar が負の場合、現在の行から前方の n 番目の行を返し、返された行を新しい現在の行にします。 n または @nvar が 0 の場合、現在の行が返されます。カーソルの最初のフェッチ時に、n または @nvar を負または 0 に設定して FETCH RELATIVE を指定すると、行は返されません。 n は整数定数である必要があり、@nvar のデータ型は smallint、tinyint、または int である必要があります。

GLOBAL

cursor_name がグローバル カーソルを参照するように指定します。

cursor_name

抽出元の開いているカーソルの名前。グローバル カーソルとローカル カーソルの両方が名前としてcursor_nameを使用する場合、GLOBALが指定されている場合はcursor_nameがグローバル カーソルを指し、GLOBALが指定されていない場合はcursor_nameがローカル カーソルを指します。

@cursor_variable_name

抽出元の開いているカーソルを参照するカーソル変数名。

INTO @variable_name[ ,...n]

を使用すると、抽出操作の列データをローカル変数に配置できます。リスト内の各変数は、左から右にカーソル結果セット内の対応する列に関連付けられます。各変数のデータ型は、対応する結果セット列のデータ型と一致するか、結果セット列のデータ型でサポートされる暗黙的な変換である必要があります。変数の数は、カーソル選択リストの列の数と一致する必要があります。

コメント

ISO スタイルの DECLARE CURSOR ステートメントで SCROLL オプションが指定されていない場合、サポートされる FETCH オプションは NEXT のみです。 ISO スタイルの DECLARE CURSOR ステートメントで SCROLL オプションが指定されている場合、すべての FETCH オプションがサポートされます。

Transact-SQL DECLARE カーソル拡張プラグインを使用する場合は、次のルールが適用されます:

FORWARD_ONLY または FAST_FORWARD が指定されている場合、サポートされる FETCH オプションは NEXT のみです。

DYNAMIC、FORWARD_ONLY、または FAST_FORWARD オプションが指定されておらず、KEYSET、STATIC、または SCROLL のいずれかが指定されている場合、すべての FETCH オプションがサポートされます。

DYNAMIC SCROLL カーソルは、ABSOLUTE を除くすべての FETCH オプションをサポートします。

@@FETCH_STATUS 関数は、前の FETCH ステートメントのステータスを報告します。同じ情報が、sp_describe_cursor によって返されるカーソルの fetch_status 列に記録されます。このステータス情報は、データに対して何らかの操作を実行する前に、FETCH ステートメントによって返されたデータの有効性を判断するために使用する必要があります。詳細については、「@@FETCH_STATUS (Transact-SQL)」を参照してください。

権限

FETCH権限は、デフォルトで有効なユーザーに付与されます。

A. 単純なカーソルでの FETCH の使用

次の例では、姓が文字 B で始まる Person.Contact テーブルの行に対して単純なカーソルを宣言し、FETCH NEXT を使用してこれらの行を 1 つずつフェッチします。一つ。 FETCH ステートメントは、DECLARE CURSOR で指定された列の値を単一行の結果セットとして返します。

USE AdventureWorks
GO
DECLARE contact_cursor CURSOR FOR
SELECT LastName FROM Person.Contact
WHERE LastName LIKE 'B%'
ORDER BY LastName

OPEN contact_cursor

-- Perform the first fetch.
FETCH NEXT FROM contact_cursor

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
   -- This is executed as long as the previous fetch succeeds.
   FETCH NEXT FROM contact_cursor
END

CLOSE contact_cursor
DEALLOCATE contact_cursor
GO

B. FETCH を使用して値を変数に保存する

次の例は例 A と似ていますが、FETCH ステートメントの出力はクライアントに直接返されるのではなく、ローカル変数に保存されます。 PRINT ステートメントは、変数を 1 つの文字列に結合してクライアントに返します。

USE AdventureWorks
GO
-- Declare the variables to store the values returned by FETCH.
DECLARE @LastName varchar(50), @FirstName varchar(50)

DECLARE contact_cursor CURSOR FOR
SELECT LastName, FirstName FROM Person.Contact
WHERE LastName LIKE 'B%'
ORDER BY LastName, FirstName

OPEN contact_cursor

-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement. 

FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN

   -- Concatenate and display the current values in the variables.
   PRINT 'Contact Name: ' + @FirstName + ' ' +  @LastName

   -- This is executed as long as the previous fetch succeeds.
   FETCH NEXT FROM contact_cursor
   INTO @LastName, @FirstName
END

CLOSE contact_cursor
DEALLOCATE contact_cursor
GO

C. SCROLL カーソルを宣言し、他の FETCH オプションを使用する

以下示例创建一个 SCROLL 游标,使其通过 LAST、PRIOR、RELATIVE 和 ABSOLUTE 选项支持全部滚动功能。

另外,再举一个简单的例子:

Declare @Id varchar(20) 
Declare @Name varchar(20) 
Declare Cur Cursor For 
select substring(id,0,7) as id,name from temp1 
Open Cur 
Fetch next From Cur Into @Id,@Name 
While @@fetch_status=0 
Begin 
Update temp Set [c3]=@Name where [id] like @Id+'%' 
Fetch Next From Cur Into @Id,@Name 
End 
Close Cur 
Deallocate Cur 

 

简单的FOR循环等:

declare   @i   int   
  set   @i=0   
  while   @i  begin   
      set   @i   =   @i+1   
  end   
    
  SQL   SERVER不支持FOR循环

USE AdventureWorks
GO
-- Execute the SELECT statement alone to show the 
-- full result set that is used by the cursor.
SELECT LastName, FirstName FROM Person.Contact
ORDER BY LastName, FirstName

-- Declare the cursor.
DECLARE contact_cursor SCROLL CURSOR FOR
SELECT LastName, FirstName FROM Person.Contact
ORDER BY LastName, FirstName

OPEN contact_cursor

-- Fetch the last row in the cursor.
FETCH LAST FROM contact_cursor

-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM contact_cursor

-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM contact_cursor

-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM contact_cursor

-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM contact_cursor

CLOSE contact_cursor
DEALLOCATE contact_cursor
GO

语法

FETCH 
          [ [ NEXT | PRIOR | FIRST | LAST 
                    | ABSOLUTE { n | @nvar } 
                    | RELATIVE { n | @nvar } 
               ] 
               FROM 
          ] 
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name } 
[ INTO @variable_name [ ,...n ] ]


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール