it-swarm-eu.dev

Přidat sloupec s výchozí hodnotou existující tabulky v SQL Server

Jak lze sloupec s výchozí hodnotou přidat do existující tabulky v SQL Server 2000 / SQL Server 2005 ?

2439
Mathias

Syntax:

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

Příklad:

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.

Poznámky:

Volitelný název omezení:
Pokud vynecháte CONSTRAINT D_SomeTable_SomeCol, SQL Server se automaticky vygeneruje
A Default-Contraint s legračním jménem jako: DF__SomeTa__SomeC__4FB7FEF6

Volitelné prohlášení o hodnotách:
WITH VALUES je potřeba pouze v případě, že je sloupec Nullable
A chcete použít výchozí hodnotu pro existující záznamy.
Pokud je váš sloupec NOT NULL, pak automaticky použije výchozí hodnotu
Pro všechny existující záznamy, zda zadáte WITH VALUES nebo ne.

Jak vkládání pracuje s výchozím omezením:
Pokud vložíte záznam do SomeTable a donotSpecifikujte hodnotu SomeCol, pak bude výchozí hodnota 0.
Pokud vložíte hodnotu SomeCol jako proměnnou NULL (a váš sloupec povolí hodnoty null), zadejte záznama.
Pak bude default-omezení omezenonotbe used a NULL bude vloženo jako hodnota.

Poznámky byly založeny na skvělé zpětné vazbě každého z nich.
Zvláštní poděkování:
@Yatrix, @WalterStabosz, @YahooSerious a @StackMan pro jejich komentáře.

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

ZahrnutíDEFAULTvyplní sloupec v existujících řádcích s výchozí hodnotou, takže omezení NOT NULL není porušeno. 

903
dbugger

Když přidáváte nulovatelný sloupec , WITH VALUES zajistí, že specifická hodnota DEFAULT bude použita na existující řádky:

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

Pokud přidáváte sloupec s NOT NULL podmínkou, nemá DEFAULT omezení (hodnota). Příkaz ALTER TABLE se v tomto případě nezdaří, pokud má tabulka v něm řádky. Řešením je buď odstranit omezení NOT NULL z nového sloupce, nebo poskytnout pro něj omezení DEFAULT.

89
jalbert

Nejzákladnější verze se dvěma řádky

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

Použití:

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

Chcete-li přidat více sloupců, můžete to provést například takto:

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.

V SQL Server 2008-R2, jsem jít do režimu návrhu - v testovací databázi - a přidat své dva sloupce pomocí návrháře a provedené nastavení s GUI, a pak neslavný Right-Click dává možnost " Generovat změnu skriptu "!

Bang up se objeví malé okno s, uhodli jste to, správně formátovaný zaručený-k-práce změnit skript. Stiskněte tlačítko easy.

48
Jack

Použití:

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

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

46
giá vàng

Můžete to udělat s T-SQL následujícím způsobem.

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

Stejně tak můžete použít SQL Server Management Studio také kliknutím pravým tlačítkem myši v nabídce Návrh, nastavením výchozí hodnoty na tabulku.

A pokud chcete přidat stejný sloupec (pokud neexistuje) do všech tabulek v databázi, pak použijte:

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

Alternativně můžete přidat výchozí nastavení, aniž byste museli výslovně pojmenovat omezení:

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

Máte-li při vytváření tohoto omezení problém s existujícími výchozími omezeními, mohou být odstraněny:

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

Chcete-li přidat sloupec do existující databázové tabulky s výchozí hodnotou, můžeme použít:

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

Zde je další způsob přidání sloupce do existující databázové tabulky s výchozí hodnotou.

Mnohem důkladnější SQL skript pro přidání sloupce s výchozí hodnotou je níže, včetně kontroly, zda sloupec existuje, než jej přidáte také zaškrtnutím omezení a jeho zrušení, pokud existuje. Tento skript také pojmenuje omezení, takže můžeme mít pěknou konvenci pro pojmenování (líbí se mi DF_) a pokud ne SQL, dá nám omezení s názvem, který má náhodně vygenerované číslo; tak to je hezké být schopný pojmenovat omezení také.

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

To jsou dva způsoby, jak přidat sloupec do existující databázové tabulky s výchozí hodnotou.

40
Catto
ALTER TABLE ADD ColumnName {Column_Type} Constraint

MSDN článek ALTER TABLE (Transact-SQL) má všechny syntaxe pozměnit tabulky.

34
Benjamin Autin

To lze provést také v GUI SSMS. Zobrazuji výchozí datum níže, ale výchozí hodnota může být samozřejmě jakákoliv.

  1. Umístěte tabulku do návrhového zobrazení (klikněte pravým tlačítkem myši na tabulku v objektu Explorer-> Design)
  2. Přidejte sloupec do tabulky (nebo klikněte na sloupec, který chcete aktualizovat, pokud již existuje )
  3. V níže uvedených vlastnostech sloupce zadejte (getdate()) nebo abc nebo 0 nebo jakoukoli hodnotu, kterou chcete v poli Výchozí hodnota nebo Vazba podle obrázku níže:

 enter image description here

29
Tony L.

Příklad:

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

Příklad:

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

Nejdříve vytvořte tabulku s názvem student:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

Přidat jeden sloupec:

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

SELECT * 
FROM STUDENT

Tabulka je vytvořena a sloupec je přidán do existující tabulky s výchozí hodnotou.

 Image 1

17
Laxmi

SQL Server + změnit tabulku + Přidat sloupec + výchozí hodnota jedinečný identifikátor 

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

Zkuste to

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

To má spoustu odpovědí, ale cítím potřebu přidat tuto rozšířenou metodu. To se zdá mnohem déle, ale je to velmi užitečné, pokud přidáváte pole NOT NULL do tabulky s miliony řádků v aktivní databázi.

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

Co to bude udělat, je přidat sloupec jako pole s nulovatelnou hodnotou as výchozí hodnotou, aktualizovat všechna pole na výchozí hodnotu (nebo můžete přiřadit více smysluplných hodnot) a nakonec změní sloupec na hodnotu NULL.

Důvodem je, pokud aktualizujete tabulku velkého měřítka a přidáte nové pole null, které musí zapisovat do každého řádku, a tím zablokuje celou tabulku, protože přidá sloupec a zapíše všechny hodnoty.

Tato metoda přidá nullable sloupec, který pracuje mnohem rychleji sám, pak vyplní data před nastavením stavu null.

Zjistil jsem, že dělat celou věc v jednom prohlášení zabrání jeden z našich aktivnějších stolů po dobu 4-8 minut a docela často jsem tento proces zabil. Tato metoda obvykle trvá jen několik sekund a způsobuje minimální zablokování.

Pokud máte navíc v oblasti řádků miliard řádků tabulku, může se stát, že bude mít za následek aktualizaci této verze:

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

Přidat nový sloupec do tabulky:

ALTER TABLE [table]
ADD Column1 Datatype

Například,

ALTER TABLE [test]
ADD ID Int

Pokud chce uživatel provést automatické zvýšení, pak:

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

To lze provést pomocí níže uvedeného kódu.

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

No, teď mám nějaké úpravy na mé předchozí odpovědi. Všiml jsem si, že žádná z odpovědí neuvádí IF NOT EXISTS. Takže budu poskytovat nové řešení, protože jsem čelil některým problémům, které měnily stůl.

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

Zde je TaskSheet je konkrétní název tabulky a IsBilledToClient je nový sloupec, který chcete vložit a 1 výchozí hodnotu. To znamená, že v novém sloupci bude hodnota existujících řádků, proto bude automaticky nastavena. Můžete však změnit, jak si přejete, s ohledem na typ sloupce, jako jsem použil BIT, takže jsem dal do výchozí hodnoty 1.

Navrhuji výše uvedený systém, protože jsem čelil problému. Co je tedy za problém? Problém je v tom, že pokud IsBilledToClient sloupec existuje v tabulce tabulky, pak pokud provedete pouze část kódu uvedeného níže, zobrazí se chyba ve staviteli dotazů serveru SQL. Pokud ale neexistuje, nebude při provádění chyb poprvé.

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)

Z tohoto dotazu můžete přidat sloupec celočíselného datového typu s výchozí hodnotou 0.

8
Sandeep Kumar

Pokud je výchozí hodnota Null, pak:

  1. V SQL Server otevřete strom cílové tabulky
  2. Klikněte pravým tlačítkem myši na sloupce ==> New Column
  3. Zadejte sloupec Název, Select Type a zaškrtněte políčko Povolit nuly
  4. V panelu nabídek klikněte na Save

Hotovo!

7
usefulBee

Tento dotaz můžete použít:

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

SQL Server + změna tabulky + Přidat sloupec + výchozí hodnota uniqueidentifier ...

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

Klikněte pravým tlačítkem myši na tabulku, klikněte pod posledním názvem sloupce a zadejte informace o sloupci.

Pak přidejte výchozí hodnotu nebo vazbu, něco jako '1' pro řetězec nebo 1 pro int.

5

Toto je pro SQL Server:

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

Příklad:

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

Pokud chcete přidat omezení, pak:

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

krok 1. PRVNÍ MUSÍTE ZMĚNIT TABULKU S PŘIDAT POLE

alter table table_name add field field_name data_type

krok-2 VYTVOŘIT VÝCHOZÍ

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

krok-3 MŮŽETE PROVÁDĚT TENTO POSTUP

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

příklad - 

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

Vyzkoušejte následující dotaz:

ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue

Tím se do tabulky přidá nový sloupec.

1
Anshul Dubey