在Sql Server 2008有没有一种方法来设置一个字段,它只能使用触发器进行更改?有没有办法让一个字段只能被触发器编辑?
例子:
当您创建它设置为NULL,然后通过触发更新e.g 1. 它不应该是能够被设置为null之外的任何用户的记录。 然后当它被更新触发器将其值设置为2。
在Sql Server 2008有没有一种方法来设置一个字段,它只能使用触发器进行更改?有没有办法让一个字段只能被触发器编辑?
例子:
当您创建它设置为NULL,然后通过触发更新e.g 1. 它不应该是能够被设置为null之外的任何用户的记录。 然后当它被更新触发器将其值设置为2。
create table tmp (a int primary key, b int)
GO
create trigger tr_insupd_tmp on tmp
instead of insert, update
as
if not exists(select * from deleted)
-- Process Insert
insert into tmp
select a, 1
from inserted
else
-- Process Update
update tmp
set b = 2
from tmp t
inner join inserted i on t.a = i.a
GO
你有没有使用计算列使用考虑。如果您希望此列中的数据仅由数据库逻辑管理,那么计算列可能就是要走的路。
这听起来像一个[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。什么是真实*问题? – 2013-02-18 11:24:01
我想要一个不能被用户更新或插入的字段。我希望字段的值由数据库逻辑控制。 (这是为了设置记录的版本) - 我希望唯一的数据库逻辑来管理值字段 – TJF 2013-02-18 11:28:20
如果你想要这个用于行版本控制,为什么不使用内置的'rowversion'类型?它不会保证顺序值,但它应该做足够好的工作。它已经建立并且不允许用户设置它的值。它不依赖于未被禁用的触发器。 – 2013-02-18 11:45:37