计算字段更新每一行

Sma*_*uys 2 sql-server t-sql sql-server-2008-r2 default-value computed-column

我在表中添加了一个计算字段,并且只想更新NULL行(或“新”行)。出了点问题,DateTime当插入 1 行时,我的表中的每一行都用当前更新。这是Create Table语法,我必须做什么才能仅使用当前更新“新”行DateTime

CREATE TABLE [dbo].[SE](
[dbID] [int] IDENTITY(1,1) NOT NULL,
[uqID] [varchar](31) NOT NULL,
[POD] [varchar](255) NULL,
[EC] [varchar](255) NULL,
[S1] [varchar](35) NULL,
[S2] [varchar](35) NULL,
[S3] [varchar](35) NULL,
[S4] [varchar](35) NULL,
[S5] [varchar](35) NULL,
[S6] [varchar](35) NULL,
[S7] [varchar](35) NULL,
[PSD] [varchar](50) NULL,
[DS] [datetime] NULL,
[CN] [varchar](max) NULL,
[autodate]  AS (getdate()),
PRIMARY KEY CLUSTERED 
(
[dbID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,     ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
Run Code Online (Sandbox Code Playgroud)

Ian*_*n_H 7

您不需要计算列,而只需使用日期时间(不可为空)列,并使用 getdate() 设置默认约束。

表定义SQL中列的语法如下:

[autodate] DATETIME NOT NULL DEFAULT(GETDATE())
Run Code Online (Sandbox Code Playgroud)

计算列时,它被查询在SQL Server计算(除非它是持续存在,则其具有存储在磁盘上的值,并且可以被索引,但是它仍然是计算的)。它旨在是可变的,并且是对另一列或多列进行计算的结果。

默认约束简单地插入一个默认值到用于任何插入物的柱,但随后被保持为固定值,就像任何其他数据列。

  • @SmallFriesBigGuys 像您创建的那样的计算列总是在*查询时*进行评估。默认值仅在*插入时*生成。 (5认同)
  • @SmallFriesBigGuys 正如 Aaron Bertrand 所说。我已经扩展了我的答案以包含一些信息和链接 (2认同)