Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Lỗi 'Tùy chọn SET không chính xác' khi xây dựng dự án cơ sở dữ liệu

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nhập dữ liệu từ .csv trong SQL Server bằng PowerShell?

  2. Làm cách nào để tạo một truy vấn cập nhật của một truy vấn động (tự động)?

  3. Cập nhật cột int trong bảng với các giá trị tăng dần duy nhất

  4. Tên tệp đăng ký SSRS w / Ngày

  5. Các cột được mã hóa SQL trong Mệnh đề WHERE