2017-08-10 3 views
2

私はSQL Server 2016を使用しており、一時テーブルを作成しようとしています。ここでの定義は次のとおりです。一時テーブルの列定義にNULLを使用することはできませんか?

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)) 

私は上記のコードを実行すると、私は次のエラーメッセージを取得しています: メッセージ13531、レベル16、状態1、ONにSYSTEM_VERSIONING回線設定7 は列「姓」ために失敗しましたテーブル 'zbachoreTest.dbo.People'と 'zbachoreTest.dbo.PeopleHistory'に同じnull許容属性がありません。

スマートフォンがあれば助けてください。ありがとう!

答えて

0

はい、できます。

まずdrop table dbo.PeopleHistoryを実行してください。既に存在する場合は、検証され、再作成されません。履歴テーブルには常に列、列名、 を注文するとデータ型の数の点で、現在または 一時テーブルでスキーマ揃えなければなりませんhttps://docs.microsoft.com/en-us/sql/relational-databases/tables/creating-a-system-versioned-temporal-table

:から

HISTORY_TABLEパラメータで指定された表がすでに存在する場合は、 それは用語スキーマの一貫性と時間的データの一貫性の に新たに作成された一時テーブルに対して検証されます。 無効な履歴テーブルを指定すると、CREATE TABLEステートメントは失敗します。

+0

ありがとうございました!あなたが説明したので、それは完璧な意味があります! – Zed

関連する問題