複数のレコード (~250) をテーブル (MyTable など) に挿入しようとしていますが、まだ存在しない場合にのみ新しい行を挿入したいと考えています。
私は SQL Server 2008 R2 を使用しており、SQL conditional insert if row does not already existなどの他のスレッドから助けを得ました。
次の削除されたスクリプトでそれを達成できますが、挿入されたすべての行に対してこのチェックを繰り返す必要があるため、これを行うためのより良い (短い) 方法があるかどうかを知りたいです。このスクリプトは、DB のデプロイ中に 1 回実行するだけなので、パフォーマンスについてはあまり心配していません。
INSERT INTO MyTable([Description], [CreatedDate], [CreatedBy], [ModifiedDate], [ModifiedBy], [IsActive], [IsDeleted])
SELECT N'ababab', GETDATE(), 1, NULL, NULL, 1, 0
WHERE NOT EXISTS(SELECT * FROM MyTable WITH (ROWLOCK, HOLDLOCK, UPDLOCK)
WHERE
([InstanceId] IS NULL OR [InstanceId] = 1)
AND [ChannelPartnerId] IS NULL
AND [CreatedBy] = 1)
UNION ALL
SELECT N'xyz', 1, GETDATE(), 1, NULL, NULL, 1, 0
WHERE NOT EXISTS(SELECT * FROM [dbo].[TemplateQualifierCategoryMyTest] WITH (ROWLOCK, HOLDLOCK, UPDLOCK)
WHERE
([InstanceId] IS NULL OR [InstanceId] = 1)
AND [ChannelPartnerId] IS NULL
AND [CreatedBy] = 1)
-- More SELECT statements goes here