2013-02-18 81 views
0

在Sql Server 2008有没有一种方法来设置一个字段,它只能使用触发器进行更改?有没有办法让一个字段只能被触发器编辑?

例子:

当您创建它设置为NULL,然后通过触发更新e.g 1. 它不应该是能够被设置为null之外的任何用户的记录。 然后当它被更新触发器将其值设置为2。

+1

这听起来像一个[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。什么是真实*问题? – 2013-02-18 11:24:01

+0

我想要一个不能被用户更新或插入的字段。我希望字段的值由数据库逻辑控制。 (这是为了设置记录的版本) - 我希望唯一的数据库逻辑来管理值字段 – TJF 2013-02-18 11:28:20

+2

如果你想要这个用于行版本控制,为什么不使用内置的'rowversion'类型?它不会保证顺序值,但它应该做足够好的工作。它已经建立并且不允许用户设置它的值。它不依赖于未被禁用的触发器。 – 2013-02-18 11:45:37

回答

1
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 
+0

你已经从字面上理解了这一点 - 其含义是进一步更新会增加值,而不是每次都设置为2。 – 2013-02-18 12:00:07

+0

这是一个如何解决通过触发控制字段设置问题的例子。我把问题中的逻辑作为所需要的一个例子。无论如何,改变它来做你所说的事情是微不足道的。 – muhmud 2013-02-18 13:50:23

+0

我认为这有潜力! – TJF 2013-02-18 15:34:44

0

你有没有使用计算列使用考虑。如果您希望此列中的数据仅由数据库逻辑管理,那么计算列可能就是要走的路。

相关问题