【发布时间】:2012-10-16 11:07:22
【问题描述】:
问题:
在我们的 SQL-Server 2005 数据库中,我们有一个表 T_Groups。
T_Groups 具有字段 ID (PK) 和名称。
现在我们公司的一些白痴将名称用作映射表中的键...
这意味着现在人们可能不会更改组名,因为如果这样做了,映射就消失了……
现在,在解决此问题之前,我需要向 T_Groups 添加限制,因此无法更新组的名称。
请注意,插入应该仍然是可能的,并且不更改组名的更新也应该是可能的。
还要注意,应用程序的用户和开发人员同时拥有 dbo 和 sysadmin 权限,因此 REVOKE/DENY 将不起作用。
如何使用触发器做到这一点?
【问题讨论】:
-
不是问题的答案,但我认为更好的解决方案是在 T_Groups.Name 上创建唯一约束,然后在映射表中,您只需添加一个外键.
-
@hvd:没错,这也不见了。就像我说的,是个白痴。
-
我也不是这个意思,我的意思是作为触发器的替代品。如果在映射表中使用了名称,则外键已经阻止了对 T_Groups.Name 的更新,或者(使用
ON UPDATE CASCADE)确保映射表根据需要进行更新。或者这是否也允许您希望禁止的事情? -
@hvd:嗯,理论上它是一种替代方案,但它不仅仅是一张桌子,所以它需要很长时间,我可能会监督一张桌子。此外,该名称不属于其中,我不想插入限制只是为了以后必须删除它们,所以...
标签: sql sql-server tsql sql-server-2005 sql-server-2008-r2