Menurut BOL :
Untuk membuat tabel dengan kolom tetap yang dihitung, pengaturan koneksi berikut harus diaktifkan:
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
Nilai-nilai ini ditetapkan pada tingkat basis data dan dapat dilihat menggunakan:
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
Namun, opsi SET juga dapat diatur oleh aplikasi klien menghubungkan ke SQL Server.
Contoh sempurna adalah SQL Server Management Studio yang memiliki nilai default untuk SET ANSI_NULLS dan SET QUOTED_IDENTIFIER keduanya ke ON. Ini adalah salah satu alasan mengapa saya awalnya tidak dapat menduplikasi kesalahan yang Anda posting.
Bagaimanapun, untuk menduplikasi kesalahan, coba ini (ini akan menimpa pengaturan default 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
)
Anda dapat memperbaiki kasus uji di atas dengan menggunakan:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
Saya akan merekomendasikan untuk mengubah dua pengaturan ini dalam skrip Anda sebelum membuat tabel dan indeks terkait.