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

SQLSERVER カーソルおよびループ ステートメント

Dec 14, 2016 am 11:30 AM

カーソルに関して整理すると、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<10
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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)