我正在使用SQL Server 2016并尝试创建Temporal表。这是定义:
USE zbachoreTest
GO`enter code here`
IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'People' AND temporal_type_desc ='SYSTEM_VERSIONED_TEMPORAL_TABLE' )
ALTER TABLE dbo.People SET( SYSTEM_VERSIONING = OFF)
DROP TABLE IF EXISTS dbo.People
CREATE TABLE dbo.People(
PersonID INT IDENTITY(1,1) NOT NULL CONSTRAINT PK_People PRIMARY KEY(PersonID),
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NULL,
StartTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL
CONSTRAINT DF_People_StartTime DEFAULT SYSDATETIME(),
EndTime DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL
CONSTRAINT DF_People_EndTime DEFAULT CONVERT(DATETIME2,'9999-12-31 23:59:59.9999999'),
PERIOD FOR SYSTEM_TIME(StartTime,EndTime)
) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.PeopleHistory))
当我运行上面的代码时,我收到以下错误消息: Msg 13531,Level 16,State 1,Line 7 将SYSTEM_VERSIONING设置为ON失败,因为列'FirstName'在表'zbachoreTest.dbo.People'和'zbachoreTest.dbo.PeopleHistory'中没有相同的nullability属性。
任何聪明的人都请帮忙。谢谢!
答案 0 :(得分:1)
是的,你可以。
首先supportFragmentManager.transactStateless {
replace(containerViewId, fragmentInstance, "TAG")
}
。如果它已经存在,它将仅被验证,而不是重新创建。
历史记录表必须始终与当前或者模式对齐 时间表,按列数,列名,排序 和数据类型。
和
如果HISTORY_TABLE参数指定的表已存在, 它将根据新创建的时态表进行验证 模式一致性和时间数据一致性。如果你指定一个 无效的历史表,CREATE TABLE语句将失败。