2009-01-28 57 views

回答

2

嗯,我認爲你需要的視圖,以便不直接更新的基礎表而不是使用觸發器。

這是一篇文章解釋他們。 Article

另一個例子。示例代碼如下所示。 Article2

樣品 (當然,你需要修改這個以滿足您的觀點。)

CREATE TRIGGER tr_Employees_U on Employees FOR UPDATE AS 
    IF UPDATE(lastname) 
    BEGIN 
     RAISERROR ('cannot change lastname', 16, 1) 
     ROLLBACK TRAN 
     RETURN 
    END 
GO 

使用觸發器之一:他們的

1)錯誤嘗試更新列

2)只是不更新​​該列

然後你應該是設置。

+0

完美,我會用它。 謝謝 – 2009-01-28 11:57:30

1

我知道這是一個老問題,但我碰到它搜索檔案,並有(我認爲)一個更好的解決方案。原始海報可能並不在意,但它可能會幫助其他人研究相同的問題。

如果您在您的視圖中定義了一個字段,使其只能作爲某個操作的結果進行讀取,它將自動無法更新,而且這比創建和維護觸發器更簡單。

在我的情況下,我加入了一個輔助表,我希望顯示加入的字段,但不允許任何人對其進行更改,因爲它隨後會更改所有連接的記錄,而不僅僅是正在編輯的記錄。該字段是一個簡單的文本,名爲Pristup。我所做的只是在視圖定義字段:

LTRIM(Pristup)Pristup

此名稱不變,但內容不能改變,無論權限。簡單,徹底有效。