2009-01-28 41 views

回答

2

嗯,我认为你需要的视图,以便不直接更新的基础表而不是使用触发器。

这是一篇文章解释他们。 Article

另一个例子。示例代码如下所示。 Article2

样品 (当然,你需要修改这个以满足您的观点。)

CREATE TRIGGER tr_Employees_U on Employees FOR UPDATE AS 
    IF UPDATE(lastname) 
    BEGIN 
     RAISERROR ('cannot change lastname', 16, 1) 
     ROLLBACK TRAN 
     RETURN 
    END 
GO 

使用触发器之一:他们的

1)错误尝试更新列

2)只是不更新​​该列

然后你应该是设置。

+0

完美,我会用它。 谢谢 – 2009-01-28 11:57:30

1

我知道这是一个老问题,但我碰到它搜索档案,并有(我认为)一个更好的解决方案。原始海报可能并不在意,但它可能会帮助其他人研究相同的问题。

如果您在您的视图中定义了一个字段,使其只能作为某个操作的结果进行读取,它将自动无法更新,而且这比创建和维护触发器更简单。

在我的情况下,我加入了一个辅助表,我希望显示加入的字段,但不允许任何人对其进行更改,因为它随后会更改所有连接的记录,而不仅仅是正在编辑的记录。该字段是一个简单的文本,名为Pristup。我所做的只是在视图定义字段:

LTRIM(Pristup)Pristup

此名称不变,但内容不能改变,无论权限。简单,彻底有效。