【问题标题】:Do temporal tables in SQL Server 2017 support foreign keys?SQL Server 2017 中的时态表是否支持外键?
【发布时间】:2019-03-01 06:38:02
【问题描述】:

如果我尝试在 Visual Studio 中向临时表添加外键,则无法解析对主表的引用。无论该表也是临时表还是不是临时表,都会发生这种情况。

文档说临时表的历史表中不能有外键...但他们没有说临时表本身不能有外键。

有可能吗?

CREATE TABLE [Doc].[Document]
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY,
    [SysStart] DATETIME2 (7) GENERATED ALWAYS AS ROW START NOT NULL DEFAULT CAST('1900-1-1 00:00:00.0000000' AS datetime2),
    [SysEnd] DATETIME2 (7) GENERATED ALWAYS AS ROW END NOT NULL DEFAULT CAST('9999-12-31 12:59:59.9999999' AS datetime2), 
    [Name] NVARCHAR(250) NOT NULL, 
    [TypeId] INT NOT NULL, 
    [InActive] BIT NOT NULL DEFAULT 0, 
    [UpsertedBy] NVARCHAR(100) NOT NULL, 
    [DateAndTime] DATE NOT NULL DEFAULT getdate(), 

    CONSTRAINT [FK_Document_ToTable] 
        FOREIGN KEY ([TypeId]) **REFERENCES [Type]([Id])**, 

    PERIOD FOR SYSTEM_TIME ([SysStart], [SysEnd])
)
WITH (SYSTEM_VERSIONING = ON(HISTORY_TABLE=[Doc].[Document_HISTORY], DATA_CONSISTENCY_CHECK=ON))

【问题讨论】:

  • SSDT 在临时表方面仍然非常不稳定 - 我经常不得不关闭 VS 并删除 SSDT 的临时文件(*.jfm*.dbmdlsqlproj.user,以及 nuking它的 binobj 文件),否则它会抱怨缺少或不匹配的历史记录表 - 我怀疑这是你的实际问题。

标签: sql-server temporal-tables


【解决方案1】:

是的,完全有可能。

下面的工作正常

CREATE TABLE Foo(FooId INT PRIMARY KEY);


CREATE TABLE Bar
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY,
    FooId INT REFERENCES Foo, /*Works fine*/
    [SysStart] DATETIME2 (7) GENERATED ALWAYS AS ROW START NOT NULL DEFAULT CAST('1900-1-1 00:00:00.0000000' AS datetime2),
    [SysEnd] DATETIME2 (7) GENERATED ALWAYS AS ROW END NOT NULL DEFAULT CAST('9999-12-31 12:59:59.9999999' AS datetime2), 
    PERIOD FOR SYSTEM_TIME ([SysStart], [SysEnd])
)
WITH (SYSTEM_VERSIONING = ON)

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    相关资源
    最近更新 更多