我的 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')
我怀疑性能永远不会成为问题,因为这个脚本只会插入角色和权限。那么检查每一行是否存在的最干净的方法是什么,并且只插入那些不存在于表中的行?