どのようにMSSQLの一括挿入と組み合わせてバージョン管理を実装するのですか?

.net sqlbulkcopy sql-server tsql

質問

私は、.NETクラスSqlBulkCopyを使用して、多くのレコード(通常は100k)の一括挿入をMS SQL Server 2012データベースに実行しています。私のテーブルは次のようになります:

CREATE TABLE [dbo].[Product](
  [Id] [bigint] NOT NULL,
  [Name] [varchar](50) NULL,
  [ProductClassId] [int] NOT NULL,
  [StateDate] [date] NOT NULL,
  [IsActive] [bit] NOT NULL,
);

私はこのロジックを実装する必要があります:各ProductClassの最新の製品レコードのみがアクティブです。製品レコードが挿入されている場合、新しく挿入された製品のProductClassと同じProductClass内の以前のアクティブな製品(IsActiveを0に設定)を非アクティブにする必要があります。私は、新しく挿入された製品のStateDateが現在アクティブな製品のStateDateよりも高い場合にのみ、これを実行したいと考えています。そうでなければ、新しいレコードはまだ挿入されますが、IsActive = 0(現在の製品は元のままです)で挿入されます。

どのように効果的にこれを行うにはどのようなアイデア?私は引き金を考えましたが、遅くなるのではないかと恐れています。

ありがとうございました

人気のある回答

トリックは、SqlBulkCopyを使用して最終テーブルにデータを移動することではありません。

一時テーブルを作成し、そこに一括アップロードし、SQLステートメントで最終テーブルに処理します。この処理では、あなたが望むすべてのETLを行うことができます;)



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ