私の SQL データベース プロジェクトには、データベースの一部である必要がある既定値を登録する配置後スクリプトがあります。結果を変更せずにこのスクリプトを複数回実行できるようにしたいので、少し変更を加える必要がある場合は手動で実行できます。
INSERT INTO [UserRole] ([Name])
SELECT 'Regular'
UNION ALL
SELECT 'Admin'
INSERT INTO [UserRight] ([Name])
SELECT 'CanAccessApplicationLogs'
UNION ALL
SELECT 'CanAccessApplicationJobs'
INSERT INTO [UserRoleRight] ([UserRoleId], [UserRightId])
SELECT [Ro].[Id], [Ri].[Id] FROM [UserRight] Ri, [UserRole] Ro
WHERE ([Ro].[Name] = 'Admin' AND
[Ri].[Name] = 'CanAccessApplicationLogs')
OR ([Ro].[Name] = 'Admin' AND
[Ri].[Name] = 'CanAccessApplicationJobs')
このスクリプトはロールと権限を挿入するだけなので、パフォーマンスが問題になるとは思えません。では、各行が存在するかどうかを確認し、まだテーブルにない行のみを挿入する最もクリーンな方法は何でしょうか?