2011-08-29 64 views
2

是否有任何方法来存储(同时插入)列上的值,永远不能改变?有没有办法只存储一次字段值?

例如像:

插入到DB行 “A,B,C,X,S,X” - 和X * 不会 *能够改变。 (但是,如果整行被删除 - 它的罚款“

+1

有在这里列出不错的选择,但应该记住,有人SA级别的访问权限可以删除任何试图阻止变化,如果他们所以选择了。对于具有SA级别访问权限的人员,任何尝试制作无法访问的列仅仅是一个建议。 – TimothyAWiseman

回答

3

您可以在更新之前或更新后(http://msdn.microsoft.com/en-us/library/ms188601.aspx)写入触发器来检查行是否将更改。更新,如果列修改会回滚事务。

CREATE TRIGGER tr_update on YourTable AFTER UPDATE AS 
    IF UPDATE(YourColumn) 
    BEGIN 
     RAISERROR ('cannot change yourColumn', 16, 1) 
     ROLLBACK TRAN 
     RETURN 
    END 
GO 
4

您可以删除更新privilieges该列从用户你不希望能够改变值,或者使用更新触发器,以防止更新。

如果您想要更新,更新触发器更容易来自任何用户的低更新。

+0

任一选项都可以工作,但触发器的性能和复杂性价格较高,因此删除该列的更新是更好的选择。 – TimothyAWiseman

2

添加更新触发器,在那里你检查是否有变化:

CREATE TRIGGER YourTrigger On YourTable FOR UPDATE 
AS 

IF EXISTS (SELECT 1 
       FROM INSERTED   i 
        INNER JOIN DELETED d ON i.PK=d.PK 
       WHERE i.columnX!=d.columnX 
        OR (i.columnX IS NULL and d.columnx IS NOT NULL) 
        OR (d.columnX IS NULL and i.columnx IS NOT NULL) 
     ) 
BEGIN 
    ROLLBACK 
    RAISERROR('Error, can''t change columnX',16,1) 
    RETURN 
END 

GO 
相关问题