2011-08-29 88 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 
相關問題