有没有办法只存储一次字段值?

时间:2011-08-29 15:26:55

标签: sql-server

有没有办法在列上存储(插入)一个永远无法更改的值?

例如:

插入数据库行“a,b,c,x,s, X ” - X * 不会 *能够改变。 (但是,如果删除整行 - 那就好了“

3 个答案:

答案 0 :(得分:4)

您可以从不希望更改值的用户中删除该列的UPDATE特权。或者,使用更新触发器来阻止更新。

如果您想禁止任何用户的更新,则更新触发器会更容易。

答案 1 :(得分: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

答案 2 :(得分: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