是否有任何方法來存儲(同時插入)列上的值,永遠不能改變?有沒有辦法只存儲一次字段值?
例如像:
插入到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