SQL格納プロセス+ラベル循環ロット()操作データ

3115 ワード

私が集めたのは、とても役に立ちました。
 
1.ビーコンサイクルでMember Acceountテーブルのデータを更新、削除する
DECLARE My_Cursor CURSOR --    

FOR (SELECT * FROM dbo.MemberAccount) --            

OPEN My_Cursor; --    

FETCH NEXT FROM My_Cursor ; --       

WHILE @@FETCH_STATUS = 0

    BEGIN

        --UPDATE dbo.MemberAccount SET UserName = UserName + 'A' WHERE CURRENT OF My_Cursor; --  

        --DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor; --  

        FETCH NEXT FROM My_Cursor; --       

    END

CLOSE My_Cursor; --    

DEALLOCATE My_Cursor; --    

GO

 2.ビーコンサイクルを利用して、Member Serviceテーブルのデータを更新する(各ユーザが購入したサービスを更新する時間)
DECLARE @UserId varchar(50) 

DECLARE My_Cursor CURSOR --    

FOR (SELECT UserId FROM dbo.MemberAccount) --            

OPEN My_Cursor; --    

FETCH NEXT FROM My_Cursor INTO @UserId; --       ( MemberAccount   UserId  @UserId   )

WHILE @@FETCH_STATUS = 0

    BEGIN

        PRINT @UserId; --    (  MemberAccount   UserId)

        UPDATE dbo.MemberService SET ServiceTime = DATEADD(Month, 6, getdate()) WHERE UserId = @UserId; --    

        FETCH NEXT FROM My_Cursor INTO @UserId; --       ( MemberAccount   UserId  @UserId   )

    END

CLOSE My_Cursor; --    

DEALLOCATE My_Cursor; --    

GO

 sql記憶過程でどのようにデータセットを循環しますか?
A.簡単なクルーズにFETCHを使用する
以下の例はPerson.Contectの表の名字で、アルファベットBの先頭の行で簡単なラベルを宣言し、FETCH NEXTを使ってこれらの行を一つ一つ抽出します。FETCH文は、DECLARE CURSORで指定された列の値を1行の結果セットとして返します。
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文は、変数を単一の文字列にまとめてクライアントに返します。
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