Ben*_*her 9 sql sql-server ddl sql-server-2008
是否可以immutable在MSSQL中标记列?
似乎它将是一个有用的DDL功能; 一旦在一行中设置了一个值('row'被定义为主键的特定值关系),如果没有删除该行,则无法更改它.
显然(像大多数事情一样)这在应用程序层中是可行的,但SQL DDL的一半乐趣是错误检查应用程序代码.
a_h*_*ame 12
如果执行DML的用户不是对象的所有者而不是数据库本身中的"db_owner",则只能授予"insert"权限,但不能为该表授予更新权限:
假设有一张桌子 id, col1, col2
grant insert, select, delete on the_table to the_user;
grant update (id, col2) on the_table to the_user;
Run Code Online (Sandbox Code Playgroud)
通过这些授权,the_user可以为所有三列插入行和供应值.他也可以更新id和col2列,但不能更新col1列.
db_owner(可能还有表的创建者/所有者)总是可以更新所有列.我不知道是否有办法从这些rolws中撤销该特权.
使用这样的UPDATE TRIGGER是可能的:
CREATE TRIGGER trgAfterUpdateAsset ON dbo.Asset
FOR UPDATE AS
IF UPDATE(AssetTypeID) AND EXISTS (SELECT * FROM inserted i JOIN deleted d ON i.ID = d.ID WHERE i.AssetTypeID <> d.AssetTypeID)
BEGIN
RAISERROR ('AssetTypeID cannot change.', 16, 1);
ROLLBACK TRAN
END
Run Code Online (Sandbox Code Playgroud)
(注意:该表有一个主键列,称为ID)。
如果AssetTypeID的值更改,我只会拒绝更新。因此,该列可能存在于更新中,并且如果指定了旧值,则该列将通过。(我需要这样)
| 归档时间: |
|
| 查看次数: |
4619 次 |
| 最近记录: |