我很好奇是否可以创建一个包含永远无法更改的列的表,但该表的其他列可以。
例如,我可以想象一个CreatedByUser永远不应更改的列。
SQL Server 中是否有为此提供内置功能,还是只能通过触发器或其他方式实现?
Mar*_*ith 27
没有对不可更新列的内置声明性支持(除了特定的预定义情况,例如IDENTITY)
此连接项目请求它但被拒绝。添加 DRI 以强制执行不可变的列值
一个UPDATE触发很可能是实现这一目标的最可靠的方法。IF UPDATE(CreatedByUser)如果为真,它可以检查并引发错误并回滚事务。
jar*_*ics 12
我已将Martin Smith 的回答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 的值发生变化,我只会拒绝更新。因此该列可能存在于更新中,如果该值没有改变,则它会通过。(我需要这种方式)
| 归档时间: |
|
| 查看次数: |
32731 次 |
| 最近记录: |