sql >> Database >  >> RDS >> Sqlserver

Update ANSI_NULLS optie in een bestaande tabel

Dit was cross gepost op databasebeheerders dus ik kan net zo goed mijn antwoord vanaf daar posten om toekomstige zoekers te helpen.

Het kan worden gedaan als een wijziging van alleen metagegevens (d.w.z. zonder alle gegevens naar een nieuwe tabel te migreren) met behulp van ALTER TABLE ... SWITCH .

Voorbeeldcode hieronder

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

WAARSCHUWING:wanneer uw tabel een IDENTITY-kolom bevat, moet u de IDENTITY-waarde opnieuw invoeren. De SWITCH TO stelt de seed van de identiteitskolom opnieuw in en als u geen UNIQUE of PRIMARY KEY-beperking voor de identiteit hebt (bijvoorbeeld bij gebruik van de CLUSTERED COLUMNSTORE-index in SQL 2014) zul je het niet meteen merken. Je moet DBCC CHECKIDENT ('dbo.YourTable', RESEED, [reseed value]) gebruiken om de seed-waarde opnieuw correct in te stellen.



  1. Google Maps API v3 checkbox / filter database

  2. Waarde vervangen binnen een door komma's gescheiden tekenreeks in MySQL?

  3. Geen bufferruimte beschikbaar (maximale verbinding bereikt?) Formulier Postgres EDB-stuurprogramma

  4. Tabel- en indexgrootte in SQL Server