[英]How do I create system versioned tables using SSDT in Visual Studio 2019?
我正在嘗試使用數據庫項目創建帶有系統版本控制的表。
以下架構給出錯誤:
SQL70633:系統版本控制的時態表必須明確提供歷史表名。
CREATE TABLE [dbo].[Products] ( [Id] INT NOT NULL PRIMARY KEY, [Name] NVARCHAR(255) NOT NULL, [ModifiedBy] NVARCHAR(127) NULL ) WITH (SYSTEM_VERSIONING = ON) GO
帶有明確的名稱:
SQL71501:表:[dbo].[Products] 有一個未解析的對表 [history].[ProductsHistory] 的引用。
SQL46010:] 附近的語法不正確。
CREATE TABLE [dbo].[Products] ( [Id] INT NOT NULL PRIMARY KEY, [Name] NVARCHAR(255) NOT NULL, [ModifiedBy] NVARCHAR(127) NULL ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [history].ProductsHistory)) GO
我已經嘗試了最新版本的 Visual Studio 2019 (16.7.5) 和最新的預覽版 (16.8.0 Preview 3.2)。
這兩種情況下的語法都是無效的。 在 SSMS 中執行第一個查詢返回:
如果未定義 SYSTEM_TIME 時間段,則無法將 SYSTEM_VERSIONING 設置為 ON。
該命令需要一個PERIOD FOR SYSTEM_TIME
子句來指定用於指定記錄有效期的列。
文檔示例展示了如何使用默認的、自動命名的歷史表創建時態表:
CREATE TABLE [dbo].[Products]
(
[Id] INT NOT NULL PRIMARY KEY,
[Name] NVARCHAR(255) NOT NULL,
[ModifiedBy] NVARCHAR(127) NULL,
SysStartTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL,
SysEndTime DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH (SYSTEM_VERSIONING = ON)
在這種情況下, SysStartTime
和SysEndTime
用於指定記錄的有效期。
使用用戶指定的表名創建時態表需要類似的語法
create TABLE [dbo].[Products]
(
[Id] INT NOT NULL PRIMARY KEY,
[Name] NVARCHAR(255) NOT NULL,
[ModifiedBy] NVARCHAR(127) NULL,
SysStartTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL,
SysEndTime DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.ProductHistory))
可以在不同的模式(例如history
上創建歷史表,只要該模式存在,但這可能不是一個好主意,除非這解決了某些特定問題。 current 和 history 表代表同一個實體,相互依賴並具有特定的安全限制,因此將它們存儲在單獨的模式中會使生活變得更加困難。
要在單獨的架構中創建表,首先創建架構:
CREATE SCHEMA history
然后使用表定義中的架構:
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = history.ProductHistory))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.