我需要在下面的临时表中为我的本地开发目的填充数据,开始日期应该是旧的。给定的表架构为
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 ) )
我需要在此表中插入一些过时的数据。
INSERT INTO dbo.Contact ( ContactID, ContactNumber, --SequenceID - this column value is auto-generated SysStartTime, SysEndTime ) VALUES ( NEWID(), -- ContactID - uniqueidentifier N'9999912345', -- ContactNumber - nvarchar -- SequenceID - int '2017-09-01 06:26:59', -- SysStartTime - datetime2 NULL -- SysEndTime - datetime2 )
我收到以下错误。
无法将明确的值插入表’DevDB.dbo.Contact’的GENERATED ALWAYS列中。将INSERT与列列表一起使用以排除GENERATED ALWAYS列,或将DEFAULT插入GENERATED ALWAYS列。
请帮助我如何添加或更新旧dataed数据到这个 态表
终于我找到了解决方案
第1步 :需要切换它 关闭 了SYSTEM_VERSIONING
SYSTEM_VERSIONING
ALTER TABLE dbo.Contact SET (SYSTEM_VERSIONING = OFF);
步骤#2 :需要删除PERIOD FOR SYSTEM_TIME
PERIOD FOR SYSTEM_TIME
ALTER TABLE dbo.Contact DROP PERIOD FOR SYSTEM_TIME
步骤#3 :插入要求的记录以及过去的日期
INSERT INTO dbo.Contact ( ContactID, ContactNumber, SysStartTime, SysEndTime ) VALUES ( NEWID(), -- ContactID - uniqueidentifier N'1234567890', -- ContactNumber - nvarchar '2014-09-13 00:00:00', -- SysStartTime - datetime2 '9999-12-31 23:59:59' -- SysEndTime - datetime2 )
步骤#4 :需要添加PERIOD FOR SYSTEM_TIME
ALTER TABLE dbo.Contact ADD PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime])
步骤#5 :需要切换它 开 了SYSTEM_VERSIONING
ALTER TABLE dbo.[Contact] SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE=dbo.[ContactHistory],DATA_CONSISTENCY_CHECK=ON) );
而已…