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

カーソルを使用せずにTSQLのテーブル変数をループする方法はありますか?

    まず第一に、各行を反復処理する必要があることを絶対に確認する必要があります。セットベースの操作は、私が考えることができるすべての場合に高速に実行され、通常はより単純なコードを使用します。

    データによっては、SELECTだけを使用してループできる場合があります 以下に示すステートメント:

    Declare @Id int
    
    While (Select Count(*) From ATable Where Processed = 0) > 0
    Begin
        Select Top 1 @Id = Id From ATable Where Processed = 0
    
        --Do some processing here
    
        Update ATable Set Processed = 1 Where Id = @Id 
    
    End
    

    もう1つの方法は、一時テーブルを使用することです。

    Select *
    Into   #Temp
    From   ATable
    
    Declare @Id int
    
    While (Select Count(*) From #Temp) > 0
    Begin
    
        Select Top 1 @Id = Id From #Temp
    
        --Do some processing here
    
        Delete #Temp Where Id = @Id
    
    End
    

    選択するオプションは、データの構造と量によって異なります。

    注: SQL Serverを使用している場合は、次を使用した方がよいでしょう。

    WHILE EXISTS(SELECT * FROM #Temp)
    

    COUNTの使用 テーブルのすべての行、EXISTSに触れる必要があります 最初のものに触れるだけで済みます(以下のJosefの回答を参照してください)。



    1. SQL Serverインデックスの後方スキャン:理解とパフォーマンスの調整

    2. CMONHAを使用したClusterControlノードの高可用性構成

    3. MySQLクエリをスケジュールする方法は?

    4. MySQL1062-キー「PRIMARY」の重複エントリ「0」