问题描述
CREATE TABLE [dbo].[Values]
(
[Id] [uniqueidentifier] NOT NULL,[Value] [nvarchar](150) NOT NULL,[CreatedOnUtc] [datatime2](7) NOT NULL
)
我希望sql Server在创建新条目时将CreatedOnUtc
的值设置为UTC-Now,并且不允许外部命令设置此值。
这可能吗?
解决方法
这是两个问题。对于第一个:
CREATE TABLE [dbo].[Values] (
[Id] [uniqueidentifier] NOT NULL,[Value] [nvarchar](150) NOT NULL,[CreatedOnUtc] [datetime2](7) NOT NULL DEFAULT SYSUTCDATETIME()
);
防止更改列的规范方法是使用触发器,以防止更新或插入值。
请注意,Values
对于表来说确实是一个坏名字,因为它是SQL关键字和SQL Server保留字。选择不需要转义的标识符。
还有其他方法。例如,您可以关闭对表的DML访问。然后创建一个没有CreatedOnUtc
的视图,只允许通过该视图进行插入和更新。