Theo BOL :
Để tạo một bảng với một cột được tính toán liên tục, các cài đặt kết nối sau phải được bật:
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
Các giá trị này được đặt ở cấp độ cơ sở dữ liệu và có thể được xem bằng cách sử dụng:
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
Tuy nhiên, các tùy chọn SET cũng có thể được đặt bởi ứng dụng khách kết nối với SQL Server.
Một ví dụ hoàn hảo là SQL Server Management Studio có các giá trị mặc định cho SET ANSI_NULLS và SET QUOTED_IDENTIFIER đều thành BẬT. Đây là một trong những lý do tại sao ban đầu tôi không thể nhân bản lỗi bạn đã đăng.
Dù sao, để trùng lặp lỗi, hãy thử điều này (điều này sẽ ghi đè cài đặt mặc định 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
)
Bạn có thể khắc phục trường hợp thử nghiệm ở trên bằng cách sử dụng:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
Tôi khuyên bạn nên điều chỉnh hai cài đặt này trong tập lệnh của mình trước khi tạo bảng và các chỉ mục liên quan.