更新專用列
回答
是的,你可以使用觸發器來實現,但不要使用INSTEAD OF
觸發器。 您可以更好地使用FOR UPDATE
觸發器,因爲您不必重寫整個更新查詢。你只想拒絕不允許的更新。如果允許某個操作,則不會拋出錯誤,這樣數據將照常更新。
例子:
CREATE TRIGGER [dbo].[CheckUpdate] ON [dbo].[MyTable] FOR UPDATE AS
DECLARE @EXPECTED INT = (SELECT COUNT(0) FROM INSERTED)
DECLARE @ALLOWED INT = (
SELECT COUNT(0)
FROM INSERTED i
INNER JOIN DELETED d
ON i.Id = d.Id
WHERE i.Name = d.Name -- The readonly column
)
IF(@EXPECTED <> @ALLOWED) -- True if there are not allowed records to updated
BEGIN
-- Prevent the record will be updated
RAISERROR ('Readonly columns cannot be changed',11, 1);
ROLLBACK
END
--Do nothing in the ELSE because everything seems to be OK
--(the record will be updated)
您也可以使用Stored Procedures
控制某些表的更新。
如果要限制對數據庫的更新,通常會創建更新和插入的存儲過程,並僅使用存儲過程,而不使用表更新來更新數據。
我不想甚至管理員錯誤地更新SQL Server Management Studio中的不可更新列。 –
@mehdilotfi觸發器也會在您使用MSSMS時觸發,因此沒有人可以在不避開存儲過程的情況下更新不可更新的列。在這種情況下,使用觸發器更安全。爲了避免觸發器,用戶必須首先禁用/刪除觸發器。 – hwcverwe
禁用觸發器是有意識的。但可能會忘記使用存儲過程進行更新。 –
- 1. 休眠:停用列版本更新一個專用的保存
- 2. 更新不專心的NSTextView
- 3. 通過C#更新專用隊列上的MSMQ權限
- 4. 專用的C#類更新進度
- 5. 熊貓更新專欄通過比較兩列到列表
- 6. 核心數據中主隊列更改時刷新專用隊列
- 7. 更新時代專欄D.O.B專欄自動
- 8. 更新大表(很多專欄)。 C#.NET
- 9. 更新android mediastore中的專輯封面?
- 10. Facebook的實時更新:VS專輯中
- 11. 光標沒有更新我的專欄
- 12. 根據三張表更新專欄
- 13. Kohana ORM更新專欄保存
- 14. MSMQ專用隊列限制
- 15. Excel專用列提取
- 16. 陣列用C專櫃
- 17. 從專用內部函數更新變量值
- 18. 如何使用contentResolver更新專輯封面?
- 19. NHibernate發送更新查詢獲取專用事務
- 20. .NET更新自己的專用UI線程上的WPF控件
- 21. 如何專業地熱點更新應用程序
- 22. 更新專門安裝的iOS應用程序
- 23. 維克斯 - 當應用重大專項更新
- 24. 表+ foreach - 新專欄?
- 25. SQL:更新列並在同一更新中引用這些列?
- 26. 行列專業翻譯公式專欄?
- 27. 用貓鼬更新陣列
- 28. 使用LINQ更新列
- 29. 用jquery POST更新列表
- 30. 使用Numbers更新列
爲什麼'FOR UPDATE'比'INSTEAD OF'更好? –
我改變了我的答案。它解釋了爲什麼;) – hwcverwe
我不想甚至管理員誤從SQL Server Management Studio更新不可更新的列。 –