8

SQL Server とシステム バージョン管理された (テンポラル) テーブルを使用しています。私のメイン テーブルには、INT現在 NULL を許可している列があります。null を許可しないようにこれを更新したいのですが、テーブルのシステム/履歴コピーでは null が許可されています。

私はこのステートメントを実行します:

ALTER TABLE dbo.MyTable 
    ALTER COLUMN MyInt INT NOT NULL;

そして、私はこのエラーを受け取ります:

値 NULL を列 'MyInt'、テーブル 'mydb.dbo.MyTable_History' に挿入できません。列はヌルを許可しません。更新は失敗します。

このスクリプトを使用して、システムのバージョン管理テーブルを作成しました。

ALTER TABLE dbo.MyTable
    ADD 
        ValidFrom DATETIME2 (2) GENERATED ALWAYS AS ROW START HIDDEN CONSTRAINT DFMyTable_ValidFrom DEFAULT DATEADD(SECOND, -1, SYSUTCDATETIME()),
        ValidTo DATETIME2 (2) GENERATED ALWAYS AS ROW END HIDDEN CONSTRAINT DFMyTable_ValidTo DEFAULT '9999.12.31 23:59:59.99',
        PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo);

ALTER TABLE dbo.MyTable 
    SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.MyTable_History));
GO

このシナリオで、メイン テーブルの列を null 非許容にする他の方法はありますか? システムでバージョン管理された既存の null 値を任意のガベージ値で (おそらく) 手動で更新できると思いますが、このシナリオはテンポラル テーブルでサポートする必要があるようです。

4

3 に答える 3