sql-server - SQL Server 2017 中的时态表是否支持外键?
问题描述
如果我尝试将外键添加到 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))
解决方案
是的,这是完全可能的。
以下工作正常
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)
推荐阅读
- javascript - 如何使用按钮更改文本颜色
- php - Composer 在尝试解决依赖关系时崩溃
- linux - 如何在 NCDU 命令中排除特定目录
- delphi - 设置 Form Parent 会导致控件处于非活动状态
- python - 将 HOCR 输出转换为字符串(用于正则表达式)的策略是什么?
- docker - 无法连接到远程 Ubuntu 服务器上运行的 elasticsearch 或 kibana
- javascript - Javascript 画布 - 从加载的 4 波段 RGB 图像中删除 alpha 到 3 波段 JPEG 图像?
- javascript - Google Map-SDK:多边形不会出现在 Android 设备上
- android - 在 Ionic 4 应用程序中进行的 API 调用无法在 Android 设备上运行
- c++ - 构造模板化元组类型