【发布时间】:2015-11-03 08:17:20
【问题描述】:
我有一个带有代替触发器的表(如下所示)(代码如下所示)
我的表:
ID directory manager
---------------------------
1 C:\Blah\ Bob
2 C:\Blob\ Dave
ID 是主键。
我的触发器处理插入、更新和删除。删除不是问题。我希望在我的表中插入或更新记录以确保目录是唯一的。做这个的最好方式是什么? ID 必须作为主键保存。
我的触发代码(精简),
create trigger trMyTable on MyTable
instead of insert, update, delete
as
begin
declare @permission bit
if exists(select * from inserted)
begin
if exists(select * from deleted)
begin -- its an update query
update MyTable
set directory = inserted.directory,
manager = inserted.manager
from inserted
inner join MyTable on inserted.ID = MyTable.ID;
end
else
insert into MyTable(directory, manager)
select
directory, manager
from inserted;
end
end
【问题讨论】:
-
“确保目录是唯一的” - 那么为什么不对该列应用
unique约束呢? -
对不起,我对sql知之甚少。因此,在我的表设置中,我可以对目录列应用唯一约束,然后我的代码就可以了吗?
-
是的,请参阅Create Unique Constraints。还有其他类型的约束(外键、检查,并且您已经熟悉主键约束),如果它们能够完成这项工作,您应该尝试使用它们而不是编写触发器。
-
ALTER TABLE MyTable ADD CONSTRAINT ux_MyTable_Directory UNIQUE (directory)
标签: sql sql-server triggers sql-server-2012