0

私は機能のインポートに取り組んでいます。いくつかのデータを含むExcelファイルがあり、後でユーザーが編集します.C#でSmartXLSによってExcelのインポートを実行し、すべてのデータをSQL Serverデータベースに更新しましたが、私がしたことは、Excelファイルのすべてのデータを取得し、すべての行をSQL​​テーブルに更新することです。これはパフォーマンスに影響し、未編集の行も更新しました.

変更されたセル、Excel の行のみを取得し、SQL テーブルの対応するデータに更新する方法はありますか?

var workbook = new WorkBook();
workbook.read(filePath);
var dataTable = workbook.ExportDataTable();
4

1 に答える 1

1

単なるシナリオです。gordatron と私が何について話していたかを理解するのに役立つかもしれません。

次の状況: 製品情報の中央格納場所であるテーブル "Products" と、構造が "Products" テーブルとまったく同じように見えるがデータが異なる可能性があるテーブル "UpdatedProducts" があります。次のシナリオを考えてみてください。午前中に製品テーブルをエクセルにエクスポートします。一日中、Excel テーブルの製品を削除、追加、更新します。一日の終わりに、Excel データを "Products" テーブルに再インポートしたいとします。何が必要:

  • 「UpdatedProducts」からすべてのレコードを削除します
  • Excel から「UpdatedProducts」へのデータの挿入 (可能であれば一括挿入)
  • 「製品」テーブルを更新します

次に、Merge-Statement は次のようになります。

MERGE Products AS TARGET
USING UpdatedProducts AS SOURCE 
    ON TARGET.ProductID = SOURCE.ProductID
WHEN MATCHED AND TARGET.ProductName <> SOURCE.ProductName OR TARGET.Rate <> SOURCE.Rate 
    THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName, 
                    TARGET.Rate = SOURCE.Rate 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT (ProductID, ProductName, Rate) 
        VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate)
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE

このステートメントの動作: WHEN MATCHED: 両方のテーブルにデータが存在し、ProductName または Rate が異なる場合、「Products」のデータを更新します。

WHEN NOT MATCHED BY TARGET: データはステージング テーブルに存在しますが、元のテーブルには存在しません。「製品」に追加します

ソースが一致しない場合: データは元のテーブルに存在しますが、ステージング テーブルには存在しません。「製品」から削除されます

この完璧な例についてhttp://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/に感謝します!

于 2015-05-28T14:12:35.557 に答える