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 値を任意のガベージ値で (おそらく) 手動で更新できると思いますが、このシナリオはテンポラル テーブルでサポートする必要があるようです。