Voeg een kolom met een standaardwaarde toe aan een bestaande tabel in SQL Server

Hoe kan ik een kolom met een standaardwaarde toevoegen aan een bestaande tabel in SQL Server 2000/ SQL Server 2005?


Antwoord 1, autoriteit 100%

Syntaxis:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Voorbeeld:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

Opmerkingen:

Optionele beperkingsnaam:
Als u CONSTRAINT D_SomeTable_SomeColweglaat, zal SQL Server automatisch genereren
    een Default-Contraint met een grappige naam zoals: DF__SomeTa__SomeC__4FB7FEF6

Optionele verklaring met waarden:
De WITH VALUESis alleen nodig als uw kolom Nullable is
    en u wilt dat de standaardwaarde wordt gebruikt voor bestaande records.
Als uw kolom NOT NULLis, gebruikt deze automatisch de standaardwaarde
    voor alle bestaande records, of u nu WITH VALUESopgeeft of niet.

Hoe invoegingen werken met een standaardbeperking:
Als u een record invoegt in SomeTableen nietde waarde van SomeColopgeeft, wordt deze standaard ingesteld op 0.
Als u een record invoegt ende waarde van SomeColopgeeft als NULL(en uw kolom staat nulls toe),< br>
    dan wordt de Default-Constraint nietgebruikt en wordt NULLals waarde ingevoegd.

De opmerkingen zijn gebaseerd op de geweldige feedback van iedereen hieronder.
Speciale dank aan:
    @Yatrix, @WalterStabosz, @YahooSerious en @StackMan voor hun opmerkingen.


Antwoord 2, autoriteit 29%

ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

Het opnemen van de DEFAULTvult de kolom in bestaanderijen met de standaardwaarde, zodat de NOT NULL-beperking niet wordt geschonden.


Antwoord 3, autoriteit 7%

Bij het toevoegen van een kolom met nulling, zorgt WITH VALUEServoor dat de specifieke DEFAULT-waarde wordt toegepast op bestaande rijen:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES

Antwoord 4, autoriteit 4%

ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO

Antwoord 5, autoriteit 4%

ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

Antwoord 6, autoriteit 3%

De meest eenvoudige versie met slechts twee regels

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

Antwoord 7, autoriteit 3%

Pas op wanneer de kolom die u toevoegt een NOT NULL-beperking heeft, maar geen DEFAULT-beperking (waarde). De instructie ALTER TABLEzal in dat geval mislukken als de tabel rijen bevat. De oplossing is om ofwel de NOT NULL-beperking uit de nieuwe kolom te verwijderen, of er een DEFAULT-beperking voor op te geven.


Antwoord 8, autoriteit 2%

Gebruik:

-- Add a column with a default DateTime  
-- to capture when each record is added.
ALTER TABLE myTableName  
ADD RecordAddedDate SMALLDATETIME NULL DEFAULT (GETDATE())  
GO 

Antwoord 9, autoriteit 2%

Als u meerdere kolommen wilt toevoegen, kunt u dit bijvoorbeeld op deze manier doen:

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO

Antwoord 10, autoriteit 2%

Gebruik:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

Referentie: ALTER TABLE (Transact-SQL)(MSDN)


Antwoord 11, autoriteit 2%

Om een kolom toe te voegen aan een bestaande databasetabel met een standaardwaarde, kunnen we gebruiken:

ALTER TABLE [dbo.table_name]
    ADD [Column_Name] BIT NOT NULL
Default ( 0 )

Hier is een andere manier om een kolom toe te voegen aan een bestaande databasetabel met een standaardwaarde.

Een veel grondiger SQL-script om een kolom toe te voegen met een standaardwaarde staat hieronder, inclusief controleren of de kolom bestaat voordat u deze toevoegt, ook de beperking controleren en deze verwijderen als die er is. Dit script geeft ook een naam aan de beperking, zodat we een mooie naamgevingsconventie kunnen hebben (ik hou van DF_) en als dat niet het geval is, zal SQL ons een beperking geven met een naam die een willekeurig gegenereerd nummer heeft; dus het is fijn om de beperking ook een naam te kunnen geven.

-------------------------------------------------------------------------
-- Drop COLUMN
-- Name of Column: Column_EmployeeName
-- Name of Table: table_Emplyee
--------------------------------------------------------------------------
IF EXISTS (
            SELECT 1
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'table_Emplyee'
              AND COLUMN_NAME = 'Column_EmployeeName'
           )
    BEGIN
        IF EXISTS ( SELECT 1
                    FROM sys.default_constraints
                    WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]')
                      AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]')
                  )
            BEGIN
                ------  DROP Contraint
                ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]
            PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped'
            END
     --    -----   DROP Column   -----------------------------------------------------------------
        ALTER TABLE [dbo].table_Emplyee
            DROP COLUMN Column_EmployeeName
        PRINT 'Column Column_EmployeeName in images table was dropped'
    END
--------------------------------------------------------------------------
-- ADD  COLUMN Column_EmployeeName IN table_Emplyee table
--------------------------------------------------------------------------
IF NOT EXISTS (
                SELECT 1
                FROM INFORMATION_SCHEMA.COLUMNS
                WHERE TABLE_NAME = 'table_Emplyee'
                  AND COLUMN_NAME = 'Column_EmployeeName'
               )
    BEGIN
    ----- ADD Column & Contraint
        ALTER TABLE dbo.table_Emplyee
            ADD Column_EmployeeName BIT   NOT NULL
            CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]  DEFAULT (0)
        PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added'
        PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added'
     END
GO

Dit zijn twee manieren om een kolom toe te voegen aan een bestaande databasetabel met een standaardwaarde.


Antwoord 12

Je kunt het op de volgende manier doen met T-SQL.

ALTER TABLE {TABLENAME}
 ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
 CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

U kunt ook SQL Server Management Studiogebruiken door met de rechtermuisknop te klikken op de tabel in de Design menu, waarbij u de standaardwaarde instelt op tabel.

En verder, als u dezelfde kolom (als deze niet bestaat) aan alle tabellen in de database wilt toevoegen, gebruik dan:

USE AdventureWorks;
 EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;

Antwoord 13

In SQL Server 2008-R2 ga ik naar de ontwerpmodus – in een testdatabase – en voeg mijn twee kolommen toe met behulp van de ontwerper en maak de instellingen met de GUI, en vervolgens de beruchte Rechtsklikgeeft de optie "Genereer wijzigingsscript"!

Bang up opent een klein venster met, je raadt het al, het correct geformatteerde, gegarandeerd werkend wijzigingsscript. Druk op de makkelijke knop.


Antwoord 14

U kunt ook een standaardwaarde toevoegen zonder de beperking expliciet een naam te geven:

ALTER TABLE [schema].[tablename] ADD  DEFAULT ((0)) FOR [columnname]

Als u een probleem heeft met bestaande standaardbeperkingen bij het maken van deze beperking, kunnen deze worden verwijderd door:

alter table [schema].[tablename] drop constraint [constraintname]

Antwoord 15

Dit kan ook in de SSMS GUI worden gedaan. Ik laat hieronder een standaarddatum zien, maar de standaardwaarde kan natuurlijk van alles zijn.

  1. Zet uw tafel in ontwerpweergave (klik met de rechtermuisknop op de tafel in object
    verkenner->Design)
  2. Voeg een kolom toe aan de tabel (of klik op de kolom die u wilt bijwerken als
    het bestaat al)
  3. Voer in Kolomeigenschappen hieronder (getdate())of 'abc'of 0of welke waarde dan ook in in Standaardwaarde of Bindendveld zoals hieronder afgebeeld:


Antwoord 16

ALTER TABLE ADD ColumnName {Column_Type} Constraint

Het MSDN-artikel ALTER TABLE (Transact-SQL)heeft alle syntaxis van de alter-tabel.


Antwoord 17

Voorbeeld:

ALTER TABLE [Employees] ADD Seniority int not null default 0 GO

Antwoord 18

Voorbeeld:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';

Antwoord 19

Maak eerst een tabel met naam leerling:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

Voeg er één kolom aan toe:

ALTER TABLE STUDENT 
ADD STUDENT_NAME INT NOT NULL DEFAULT(0)
SELECT * 
FROM STUDENT

De tabel wordt gemaakt en er wordt een kolom toegevoegd aan een bestaande tabel met een standaardwaarde.


Antwoord 20

Dit heeft veel antwoorden, maar ik voel de behoefte om deze uitgebreide methode toe te voegen. Dit lijkt veel langer, maar het is erg handig als je een NOT NULL-veld toevoegt aan een tabel met miljoenen rijen in een actieve database.

ALTER TABLE {schemaName}.{tableName}
    ADD {columnName} {datatype} NULL
    CONSTRAINT {constraintName} DEFAULT {DefaultValue}
UPDATE {schemaName}.{tableName}
    SET {columnName} = {DefaultValue}
    WHERE {columName} IS NULL
ALTER TABLE {schemaName}.{tableName}
    ALTER COLUMN {columnName} {datatype} NOT NULL

Wat dit zal doen, is de kolom toevoegen als een nullable-veld en met de standaardwaarde alle velden bijwerken naar de standaardwaarde (of u kunt meer betekenisvolle waarden toewijzen), en uiteindelijk zal de kolom worden gewijzigd in NOT NULL.

De reden hiervoor is dat als u een grote tabel bijwerkt en een nieuw niet-null-veld toevoegt, het naar elke afzonderlijke rij moet schrijven en hierbij de hele tabel zal vergrendelen terwijl het de kolom toevoegt en vervolgens alle waarden schrijft.

Deze methode voegt de nullable-kolom toe, die op zichzelf veel sneller werkt, en vult vervolgens de gegevens voordat de niet-null-status wordt ingesteld.

Ik heb ontdekt dat als je alles in één statement doet, een van onze meer actieve tabellen 4-8 minuten wordt geblokkeerd en heel vaak heb ik het proces afgebroken. Deze methode duurt meestal slechts een paar seconden en veroorzaakt minimale vergrendeling.

Bovendien, als u een tabel heeft in de buurt van miljarden rijen, kan het de moeite waard zijn om de update als volgt te batchen:

WHILE 1=1
BEGIN
    UPDATE TOP (1000000) {schemaName}.{tableName}
        SET {columnName} = {DefaultValue}
        WHERE {columName} IS NULL
    IF @@ROWCOUNT < 1000000
        BREAK;
END

Antwoord 21

Probeer dit

ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO

Antwoord 22

SQL Server + Tabel wijzigen + Kolom toevoegen + Standaardwaarde uniqueidentifier

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier))

Antwoord 23

IF NOT EXISTS (
    SELECT * FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME'
)
BEGIN
    ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default
END

Antwoord 24

--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO

Antwoord 25

Dit is voor SQL Server:

ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES

Voorbeeld:

ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES

Als u beperkingen wilt toevoegen:

ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES

Antwoord 26

Een nieuwe kolom aan een tabel toevoegen:

ALTER TABLE [table]
ADD Column1 Datatype

Bijvoorbeeld

ALTER TABLE [test]
ADD ID Int

Als de gebruiker het automatisch wil laten verhogen, dan:

ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL

Antwoord 27

Dit kan met de onderstaande code.

CREATE TABLE TestTable
    (FirstCol INT NOT NULL)
    GO
    ------------------------------
    -- Option 1
    ------------------------------
    -- Adding New Column
    ALTER TABLE TestTable
    ADD SecondCol INT
    GO
    -- Updating it with Default
    UPDATE TestTable
    SET SecondCol = 0
    GO
    -- Alter
    ALTER TABLE TestTable
    ALTER COLUMN SecondCol INT NOT NULL
    GO

Antwoord 28

Probeer het met de onderstaande vraag:

ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue

Hiermee wordt een nieuwe kolom aan de tabel toegevoegd.


Antwoord 29

ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

Vanuit deze query kun je een kolom van datatype integer met standaardwaarde 0 toevoegen.


Antwoord 30

Nou, ik heb nu een wijziging in mijn vorige antwoord. Ik heb gemerkt dat geen van de genoemde antwoorden IF NOT EXISTS. Dus ik ga er een nieuwe oplossing voor bieden, omdat ik problemen heb ondervonden bij het wijzigen van de tabel.

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
 IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO

Hier is TaskSheetde specifieke tabelnaam en IsBilledToClientis de nieuwe kolom die u gaat invoegen en 1de standaardwaarde. Dat betekent in de nieuwe kolom wat de waarde van de bestaande rijen zal zijn, daarom wordt er daar automatisch een ingesteld. U kunt echter naar wens wijzigen met respect voor het kolomtype zoals ik BITheb gebruikt, dus ik heb standaardwaarde 1 ingevoerd.

Ik raad het bovenstaande systeem aan, omdat ik een probleem heb ondervonden. Dus wat is het probleem? Het probleem is dat als de kolom IsBilledToClientin de tabeltabel bestaat, als u alleen het gedeelte van de onderstaande code uitvoert, u een fout ziet in de SQL-server Querybuilder. Maar als het niet bestaat, zal er voor de eerste keer geen fout zijn bij het uitvoeren.

ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]

Other episodes