BOL によると :
永続化された計算列を含むテーブルを作成するには、次の接続設定を有効にする必要があります:
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT ON
SET QUOTED_IDENTIFIER ON
これらの値はデータベース レベルで設定され、以下を使用して表示できます。
SELECT
is_ansi_nulls_on,
is_ansi_padding_on,
is_ansi_warnings_on,
is_arithabort_on,
is_concat_null_yields_null_on,
is_numeric_roundabort_on,
is_quoted_identifier_on
FROM sys.databases
ただし、 SET オプションはクライアント アプリケーションでも設定できます SQL Server に接続しています。
完璧な例は SQL Server Management Studio で、SET ANSI_NULLS と SET QUOTED_IDENTIFIER の両方の既定値が ON になっています。これが、投稿されたエラーを最初に複製できなかった理由の 1 つです。
とにかく、エラーを再現するには、これを試してください (これは SSMS のデフォルト設定を上書きします):
SET ANSI_NULLS ON
SET ANSI_PADDING OFF
SET ANSI_WARNINGS OFF
SET ARITHABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT OFF
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE T1 (
ID INT NOT NULL,
TypeVal AS ((1)) PERSISTED NOT NULL
)
以下を使用して、上記のテスト ケースを修正できます。
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
テーブルと関連するインデックスを作成する前に、スクリプトでこれら 2 つの設定を微調整することをお勧めします。