Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perbarui opsi ANSI_NULLS di tabel yang ada

Ini diposting silang di Administrator Database jadi saya mungkin juga memposting jawaban saya dari sana di sini juga untuk membantu pencari masa depan.

Ini dapat dilakukan sebagai perubahan metadata saja (yaitu tanpa memigrasikan semua data ke tabel baru) menggunakan ALTER TABLE ... SWITCH .

Contoh kode di bawah ini

/*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; 

PERINGATAN:ketika tabel Anda berisi kolom IDENTITY, Anda perlu mereseed nilai IDENTITY. SWITCH TO akan mereset benih kolom identitas dan jika Anda tidak memiliki batasan UNIQUE atau PRIMARY KEY pada identitas (misalnya saat menggunakan indeks CLUSTERED COLUMNSTORE di SQL 2014) Anda tidak akan langsung menyadarinya. Anda perlu menggunakan DBCC CHECKIDENT ('dbo.YourTable', RESEED, [reseed value]) untuk menyetel kembali nilai seed dengan benar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Batasan klausa IN di Sql Server

  2. SQL Server - indeks pada kolom yang dihitung?

  3. Menghitung jarak antara dua titik (Lintang, Bujur)

  4. Peta ulang sumber data Crystal Report

  5. Cara menghapus semua Batasan Default di Database SQL Server - Tutorial SQL Server / TSQL Bagian 94