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

Dapperを使用して(IDで)2100行を超える行を削除する正しい方法

    1つのオプションは、サーバー上に一時テーブルを作成してから、一括読み込み機能を使用して、すべてのIDをそのテーブルに一度にアップロードすることです。次に、join、EXISTS、またはIN句を使用して、一時テーブルにアップロードしたレコードのみを削除します。

    一括読み込みはSQLServerで最適化されたパスであり、非常に高速である必要があります。

    例:

    1. ステートメントCREATE TABLE #RowsToDelete(ID INT PRIMARY KEY)を実行します
    2. 一括読み込みを使用して、キーを#RowsToDeleteに挿入します
    3. DELETE FROM myTable where Id IN (SELECT ID FROM #RowsToDelete)を実行します
    4. DROP TABLE #RowsToDelteを実行します (セッションを閉じると、テーブルも自動的に削除されます)

    (Dapperを想定)コード例:

    conn.Open();
    
    var columnName = "ID";
    
    conn.Execute(string.Format("CREATE TABLE #{0}s({0} INT PRIMARY KEY)", columnName));
    
    using (var bulkCopy = new SqlBulkCopy(conn))
    {
        bulkCopy.BatchSize = ids.Count;
        bulkCopy.DestinationTableName = string.Format("#{0}s", columnName);
    
        var table = new DataTable();                    
        table.Columns.Add(columnName, typeof (int));
        bulkCopy.ColumnMappings.Add(columnName, columnName);
    
        foreach (var id in ids)
        {
            table.Rows.Add(id);
        }
    
        bulkCopy.WriteToServer(table);
    }
    
    //or do other things with your table instead of deleting here
    conn.Execute(string.Format(@"DELETE FROM myTable where Id IN 
                                       (SELECT {0} FROM #{0}s", columnName));
    
    conn.Execute(string.Format("DROP TABLE #{0}s", columnName));
    


    1. Psycopg2はプレースホルダーを使用してテーブルに挿入します

    2. SQLServer2000を使用したピボット

    3. SQLServerデータベースの複数のテーブルの列にデフォルトの制約を追加するスクリプトを生成する方法-SQLServer/TSQLチュートリアルパート94

    4. オブジェクト'xxxxxxx'、データベース'zzzzzzz'、スキーマ'dbo'に対するEXECUTE権限が拒否されました