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

Cập nhật tùy chọn ANSI_NULLS trong bảng hiện có

Đây là đăng chéo trên Quản trị viên cơ sở dữ liệu vì vậy tôi cũng có thể đăng câu trả lời của mình từ đó ở đây để giúp những người tìm kiếm trong tương lai.

Nó có thể được thực hiện dưới dạng chỉ thay đổi siêu dữ liệu (tức là không di chuyển tất cả dữ liệu sang bảng mới) bằng cách sử dụng ALTER TABLE ... SWITCH .

Mã mẫu bên dưới

/*Create table with option off*/ 
SET ANSI_NULLS OFF; 

CREATE TABLE dbo.YourTable (X INT) 

/*Add some data*/ 
INSERT INTO dbo.YourTable VALUES (1),(2),(3) 

/*Confirm the bit is set to 0*/ 
SELECT uses_ansi_nulls, * 
FROM   sys.tables 
WHERE  object_id = object_id('dbo.YourTable') 

GO 

BEGIN TRY 
    BEGIN TRANSACTION; 
    /*Create new table with identical structure but option on*/
    SET ANSI_NULLS ON; 
    CREATE TABLE dbo.YourTableNew (X INT) 

    /*Metadata only switch*/
    ALTER TABLE dbo.YourTable  SWITCH TO dbo.YourTableNew;

    DROP TABLE dbo.YourTable; 

    EXECUTE sp_rename N'dbo.YourTableNew', N'YourTable','OBJECT'; 

    /*Confirm the bit is set to 1*/ 
    SELECT uses_ansi_nulls, * 
    FROM   sys.tables 
    WHERE  object_id = object_id('dbo.YourTable') 

    /*Data still there!*/ 
    SELECT * 
    FROM dbo.YourTable

    COMMIT TRANSACTION; 
END TRY 

BEGIN CATCH 
    IF XACT_STATE() <> 0 
      ROLLBACK TRANSACTION; 

    PRINT ERROR_MESSAGE(); 
END CATCH; 

CẢNH BÁO:khi bảng của bạn chứa cột IDENTITY, bạn cần phải gửi lại giá trị IDENTITY. SWITCH TO sẽ đặt lại hạt giống của cột danh tính và nếu bạn không có ràng buộc CHÍNH hoặc CHÍNH đối với danh tính (ví dụ:khi sử dụng chỉ mục CLUSTERED COLUMNSTORE trong SQL 2014), bạn sẽ không nhận thấy nó ngay lập tức. Bạn cần sử dụng DBCC CHECKIDENT ('dbo.YourTable', RESEED, [giá trị gửi lại]) để đặt lại giá trị gốc một cách chính xác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mệnh đề WHERE so với ON khi sử dụng JOIN

  2. Sắp xếp các kết quả SQL Server theo mệnh đề IN

  3. mssql chuyển đổi varchar thành float

  4. Truy vấn sql cho bảng cây

  5. Phạm vi đặt số lượng hàng trong SQL