【发布时间】:2017-09-12 11:35:32
【问题描述】:
我需要将配置为GENERATED ALWAYS的现有表列更改为GENERATED BY DEFAULT。
示例表结构
CREATE TABLE [dbo].[Contact](
[ContactID] [uniqueidentifier] NOT NULL,
[ContactNumber] [nvarchar](50) NOT NULL,
[SequenceID] [int] IDENTITY(1,1) NOT NULL,
[SysStartTime] [datetime2](0) GENERATED ALWAYS AS ROW START NOT NULL,
[SysEndTime] [datetime2](0) GENERATED ALWAYS AS ROW END NOT NULL,
CONSTRAINT [PK_Contact] PRIMARY KEY NONCLUSTERED
(
[ContactID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY],
PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime])
) ON [PRIMARY]
WITH
(
SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[ContactHistory],
DATA_CONSISTENCY_CHECK = ON )
)
这是我现在已经拥有的表格我需要更改列
[SysStartTime] 到 GENERATED BY DEFAULT 从 GENERATED ALWAYS
我尝试了以下代码
ALTER TABLE dbo.Contact ALTER column SysStartTime SET GENERATED BY DEFAULT
但是会报错
Msg 156, Level 15, State 1, Line 19 关键字附近的语法不正确 '设置'。
请帮助我。
【问题讨论】:
-
GENERATED BY DEFAULT在任何地方都不是合法的 T-SQL 语法,并且一列是否为GENERATED ALWAYS事后无法更改,就像IDENTITY一样。由于该列用于生成临时表的历史记录,因此甚至不清楚您要做什么。您是否要删除临时表方面? -
@JeroenMostert - 不,我需要用旧日期播种一些数据。
-
让我知道这是对我的问题的支持性问题stackoverflow.com/questions/46174372/…我是对的吗?
-
@B.Balamanigandan - 这是您的问题stackoverflow.com/questions/46174372/…
-
@Mastero:那你就不走运了,因为系统版本的时态表显然不支持这一点。当然,您可以随时更改服务器本身的系统时间。如果你走那条路要小心,因为如果你把时间弄得太乱,像域身份验证这样的事情就会停止工作。此外,显然 SQL Server 可能需要一段时间才能赶上更改的时间。在这种情况下,请考虑在 VM 或其他隔离实例中创建数据库。在最早的时间创建表,并且始终向前移动时钟,从不向后移动。
标签: sql-server sql-server-2016 alter-table temporal-database