簡體   English   中英

如何在 Visual Studio 2019 中使用 SSDT 創建系統版本表?

[英]How do I create system versioned tables using SSDT in Visual Studio 2019?

我正在嘗試使用數據庫項目創建帶有系統版本控制的表。

  1. 以下架構給出錯誤:

    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
  2. 帶有明確的名稱:

    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)

在這種情況下, SysStartTimeSysEndTime用於指定記錄的有效期。

使用用戶指定的表名創建時態表需要類似的語法

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM