it-swarm.it

Aggiungere una colonna con un valore predefinito a una tabella esistente in SQL Server

Come può essere aggiunta una colonna con un valore predefinito ad una tabella esistente in SQL Server 2000 / SQL Server 2005 ?

2439
Mathias

Sintassi:

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

Esempio:

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.

Gli appunti:

Nome del vincolo facoltativo:
Se si omette CONSTRAINT D_SomeTable_SomeCol, SQL Server si autogenererà
un Prescrizione di Prescrizione con un Nome divertente come: DF__SomeTa__SomeC__4FB7FEF6

Dichiarazione facoltativa con valori:
Il WITH VALUES è necessario solo quando la colonna è Nullable
e si desidera il valore predefinito utilizzato per i record esistenti.
Se la colonna è NOT NULL, utilizzerà automaticamente il valore predefinito
per tutti i record esistenti, indipendentemente dal fatto che si specifichi WITH VALUES oppure no.

In che modo gli inserti funzionano con un vincolo predefinito:
Se si inserisce un record in SomeTable e si fanonspecificare il valore SomeCol, allora verrà impostato su 0.
Se inserisci un recordeSpecifica il valore SomeCol come NULL (e la tua colonna consente null),
quindi il vincolo predefinito sarànone verrà usato NULL come valore.

Le note erano basate sull'ottimo feedback di tutti di seguito.
Ringraziamenti speciali a:
@Yatrix, @WalterStabosz, @YahooSerious e @StackMan per i loro commenti.

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

L'inclusione diDEFAULTriempie la colonna in existing rows con il valore predefinito, quindi il vincolo NOT NULL non viene violato. 

903
dbugger

Quando aggiungi una colonna nullable, WITH VALUES garantisce che il valore DEFAULT specifico venga applicato alle righe esistenti:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
207
phunk_munkie
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
122
ddc0660
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
111
Evan V

Attenzione quando la colonna che stai aggiungendo ha un vincolo NOT NULL, ma non ha un vincolo DEFAULT (valore). L'istruzione ALTER TABLE fallirà in quel caso se la tabella contiene delle righe. La soluzione è rimuovere il vincolo NOT NULL dalla nuova colonna o fornire un vincolo DEFAULT per questo.

89
jalbert

La versione più semplice con solo due linee

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
86
adeel41

Uso:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 
69
JerryOL

Se vuoi aggiungere più colonne puoi farlo in questo modo ad esempio:

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

In SQL Server 2008-R2, vado nella modalità di progettazione - in un database di test - e aggiungo le mie due colonne usando il designer e ho apportato le impostazioni con la GUI, e quindi l'infame Right-Click dà l'opzione " Genera script di modifica "!

Bang up apre una piccola finestra con, avete indovinato, lo script di modifica garantita sul lavoro correttamente formattato. Premi il pulsante facile.

48
Jack

Uso:

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

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

46
giá vàng

Puoi fare la cosa con T-SQL nel modo seguente.

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

Oltre a poter utilizzare SQL Server Management Studio anche facendo clic con il pulsante destro del mouse nel menu Design, impostando il valore predefinito sulla tabella.

Inoltre, se si desidera aggiungere la stessa colonna (se non esiste) a tutte le tabelle nel database, utilizzare:

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

In alternativa, è possibile aggiungere un valore predefinito senza dover esplicitamente denominare il vincolo:

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

Se si verifica un problema con i vincoli predefiniti esistenti durante la creazione di questo vincolo, possono essere rimossi da:

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

Per aggiungere una colonna a una tabella di database esistente con un valore predefinito, possiamo usare:

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

Ecco un altro modo per aggiungere una colonna a una tabella di database esistente con un valore predefinito.

Uno script SQL molto più approfondito per aggiungere una colonna con un valore predefinito è al di sotto che include il controllo se la colonna esiste prima di aggiungerla, anche se si verifica il vincolo e lo si elimina se ce n'è uno. Questo script nomina anche il vincolo in modo che possiamo avere una convenzione di denominazione Nice (mi piace DF_) e se non SQL ci darà un vincolo con un nome che ha un numero generato casualmente; quindi è bello poter nominare anche il vincolo.

-------------------------------------------------------------------------
-- 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

Questi sono due modi per aggiungere una colonna a una tabella di database esistente con un valore predefinito.

40
Catto
ALTER TABLE ADD ColumnName {Column_Type} Constraint

L'articolo MSDN ALTER TABLE (Transact-SQL) ha tutta la sintassi di alter table.

34
Benjamin Autin

Questo può essere fatto anche nella GUI SSMS. Io mostro una data di default sotto, ma il valore di default può essere qualunque cosa, ovviamente.

  1. Metti la tua tabella in visualizzazione disegno (fai clic con il tasto destro del mouse sulla tabella in oggetto Explorer-> Design)
  2. Aggiungi una colonna alla tabella (o fai clic sulla colonna che vuoi aggiornare ifit esiste già)
  3. In Proprietà colonna di seguito, immettere (getdate()) o abc o 0 o qualsiasi valore desiderato nel campo Default Value o Binding come illustrato di seguito:

 enter image description here

29
Tony L.

Esempio:

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

Esempio:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';
21
Mohit Tamrakar

Per prima cosa crea un tavolo con nome studente:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

Aggiungi una colonna ad esso:

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

SELECT * 
FROM STUDENT

La tabella viene creata e una colonna viene aggiunta a una tabella esistente con un valore predefinito.

 Image 1

17
Laxmi

SQL Server + Modifica tabella + Aggiungi colonna + Valore predefinito uniqueidentifier 

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

Prova questo

ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
15
Jakir Hossain
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
14
Jeevan Gharti

Questo ha molte risposte, ma sento la necessità di aggiungere questo metodo esteso. Questo sembra molto più lungo, ma è estremamente utile se si aggiunge un campo NOT NULL a una tabella con milioni di righe in un database attivo.

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

Ciò che questo farà è aggiungere la colonna come campo nullable e con il valore predefinito, aggiornare tutti i campi al valore predefinito (oppure assegnare valori più significativi) e alla fine cambierà la colonna in NOT NULL.

La ragione di ciò è se si aggiorna una tabella di grandi dimensioni e si aggiunge un nuovo campo non nullo che deve scrivere su ogni singola riga e con la presente si bloccherà l'intera tabella mentre aggiunge la colonna e quindi scrive tutti i valori.

Questo metodo aggiungerà la colonna nullable che opera molto più velocemente da sola, quindi riempie i dati prima di impostare lo stato non nullo.

Ho scoperto che eseguire l'intera operazione in un'unica istruzione bloccherà uno dei nostri tavoli più attivi per 4-8 minuti e molto spesso ho ucciso il processo. Questo metodo richiede in genere ogni parte solo pochi secondi e causa un blocco minimo.

Inoltre, se si dispone di una tabella nell'area di miliardi di righe, potrebbe valere la pena di eseguire il batching dell'aggiornamento in questo modo:

WHILE 1=1
BEGIN
    UPDATE TOP (1000000) {schemaName}.{tableName}
        SET {columnName} = {DefaultValue}
        WHERE {columName} IS NULL

    IF @@ROWCOUNT < 1000000
        BREAK;
END
13
Ste Bov
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
12
wild coder

Aggiungi una nuova colonna a una tabella:

ALTER TABLE [table]
ADD Column1 Datatype

Per esempio,

ALTER TABLE [test]
ADD ID Int

Se l'utente vuole farlo incrementare automaticamente, allora:

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

Questo può essere fatto con il codice seguente.

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
9
Mohit Dagar

Bene, ora ho qualche modifica alla mia risposta precedente. Ho notato che nessuna delle risposte menzionate IF NOT EXISTS. Quindi ne fornirò una nuova soluzione poiché ho riscontrato alcuni problemi nell'alterare la tabella.

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

Qui TaskSheet è il nome della tabella particolare e IsBilledToClient è la nuova colonna che stai per inserire e 1 il valore predefinito. Ciò significa che nella nuova colonna quale sarà il valore delle righe esistenti, quindi verrà impostato automaticamente lì. Tuttavia, puoi cambiare come desideri con il rispetto del tipo di colonna, come ho usato BIT, quindi ho inserito il valore predefinito 1.

Suggerisco il sistema di cui sopra, perché ho avuto un problema. Quindi qual'è il problema? Il problema è che se la colonna IsBilledToClient esiste nella tabella della tabella, se si esegue solo la parte del codice fornita di seguito, verrà visualizzato un errore nel generatore Query del server SQL. Ma se non esiste allora per la prima volta non ci saranno errori durante l'esecuzione.

ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]
8
gdmanandamohon
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

Da questa query è possibile aggiungere una colonna di un intero tipo di dati con il valore predefinito 0.

8
Sandeep Kumar

Se il valore predefinito è Null, quindi:

  1. In SQL Server, apri l'albero della tabella di destinazione
  2. Fai clic destro "Colonne" ==> New Column
  3. Digita la colonna Nome, Select Type e Verifica la casella di controllo Allow Nulls
  4. Dalla barra dei menu, fare clic su Save

Fatto!

7
usefulBee

Puoi usare questa query:

ALTER TABLE tableName ADD ColumnName datatype DEFAULT DefaultValue;
6
Arun D

SQL Server + Modifica tabella + Aggiungi colonna + Valore predefinito uniqueidentifier ...

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
6
Chanukya

Fare clic con il tasto destro del mouse sulla tabella, fare clic sotto il nome dell'ultima colonna e immettere le informazioni sulla colonna.

Quindi aggiungi un valore predefinito o un bind, qualcosa come "1" per stringa o 1 per int.

5

Questo è per SQL Server:

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

Esempio:

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

Se vuoi aggiungere dei vincoli allora:

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

passo 1. INIZIARE A MODIFICARE LA TABELLA CON AGGIUNTA UN CAMPO

alter table table_name add field field_name data_type

step-2 CREA DEFAULT

USE data_base_name;
GO
CREATE DEFAULT default_name AS 'default_value';

step-3 ALLORA DEVE ESEGUIRE QUESTA PROCEDURA

exec sp_bindefault 'default_name' , 'schema_name.table_name.field_name'

esempio - 

USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
4
raju chowrsiya
--Adding New Column with Default Value
ALTER TABLE TABLENAME 
ADD COLUMNNAME DATATYPE NULL|NOT NULL DEFAULT (DEFAULT_VALUE)

OR

--Adding CONSTRAINT And Set Default Value on Column
ALTER TABLE TABLENAME ADD  CONSTRAINT [CONSTRAINT_Name]  DEFAULT 
(DEFAULT_VALUE) FOR [COLUMNNAME]
3
Erfan Mohammadi
ALTER TABLE Table1 ADD Col3 INT NOT NULL DEFAULT(0)
3

Prova con la seguente query:

ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue

Questo aggiungerà una nuova colonna nella tabella.

1
Anshul Dubey