sql >> Database teknologi >  >> RDS >> Sqlserver

Opdater ANSI_NULLS-indstillingen i en eksisterende tabel

Dette blev krydspostet på Database Administrators så jeg kan lige så godt poste mit svar derfra også her for at hjælpe fremtidige søgere.

Det kan udføres som en kun metadata-ændring (dvs. uden at migrere alle data til en ny tabel) ved hjælp af ALTER TABLE ... SWITCH .

Eksempelkode nedenfor

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

ADVARSEL:Når din tabel indeholder en IDENTITY-kolonne, skal du gense IDENTITY-værdien. SWITCH TO nulstiller identitetskolonnens frø, og hvis du ikke har en UNIK eller PRIMÆR NØGLE-begrænsning på identiteten (f.eks. når du bruger CLUSTERED COLUMNSTORE-indekset i SQL 2014) vil du ikke bemærke det med det samme. Du skal bruge DBCC CHECKIDENT ('dbo.YourTable', RESEED, [reseed value]) for at indstille startværdien korrekt igen.



  1. Hvorfor indsæt-vælg til variabel tabel fra XML-variabel så langsom?

  2. Trin for trin R12.2.6 EBS-installation på Virtual Box

  3. Hibernate @Enumerated ser ud til at blive ignoreret

  4. Selvhenvisende fremmednøgle i sequlize js