是否有任何方法来存储(同时插入)列上的值,永远不能改变?有没有办法只存储一次字段值?
例如像:
插入到DB行 “A,B,C,X,S,X” - 和X * 不会 *能够改变。 (但是,如果整行被删除 - 它的罚款“
是否有任何方法来存储(同时插入)列上的值,永远不能改变?有没有办法只存储一次字段值?
例如像:
插入到DB行 “A,B,C,X,S,X” - 和X * 不会 *能够改变。 (但是,如果整行被删除 - 它的罚款“
您可以在更新之前或更新后(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
您可以删除更新privilieges该列从用户你不希望能够改变值,或者使用更新触发器,以防止更新。
如果您想要更新,更新触发器更容易来自任何用户的低更新。
任一选项都可以工作,但触发器的性能和复杂性价格较高,因此删除该列的更新是更好的选择。 – TimothyAWiseman
添加更新触发器,在那里你检查是否有变化:
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
有在这里列出不错的选择,但应该记住,有人SA级别的访问权限可以删除任何试图阻止变化,如果他们所以选择了。对于具有SA级别访问权限的人员,任何尝试制作无法访问的列仅仅是一个建议。 – TimothyAWiseman