Frage

Wie kann eine Spalte mit einem Standardwert zu einer vorhandenen Tabelle in SQL Server 2000 hinzugefügt werden / SQL Server 2005 ?

War es hilfreich?

Lösung

Syntax:

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

Beispiel:

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.

Weitere Informationen:

Optional Constraint Name:
Wenn Sie CONSTRAINT D_SomeTable_SomeCol auslassen, dann wird SQL Server automatisch generiert
a Default-Constraint mit einem lustigen Namen wie: DF__SomeTa__SomeC__4FB7FEF6

Optional Mit-Werte Statement:
Die WITH VALUES wird nur dann benötigt, wenn die Säule ist Nullable
und Sie möchten den Standardwert für bestehende Datensätze verwendet.
Wenn Ihre Spalte NOT NULL ist, dann wird es automatisch den Standardwert
verwenden für alle vorhandenen Datensätze, ob Sie WITH VALUES angeben oder nicht.

Wie Einsätze arbeiten mit einem Standard-Constraint:
Wenn Sie einen Datensatz in SomeTable einfügen und tun nicht SomeCol Wert angeben, dann wird es 0 Standard.
Wenn legen Sie einen Datensatz und SomeCol Wert als NULL Geben Sie (und Ihre Spalte ermöglicht nulls), Frankreich dann wird der Standard-Constraint wird nicht verwendet werden und NULL wird als Wert eingefügt werden.

wurden Hinweise basierend auf jedem großen Feedback unten.
Besonderer Dank geht an:
@Yatrix, @WalterStabosz, @YahooSerious und @StackMan für ihre Kommentare.

Andere Tipps

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

Die Einbeziehung des Standard füllt die Spalte in vorhandenen Zeilen mit dem Standardwert, so dass die NOT NULL nicht verletzt wird.

Beim Hinzufügen einer NULL festlegbare Spalte , WITH VALUES wird sichergestellt, dass die spezifische Standardwert auf vorhandene Zeilen angewendet wird:

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

Hüten Sie sich vor, wenn die Spalte, die Sie hinzufügen, eine NOT NULL Einschränkung hat, wurde noch keine DEFAULT Einschränkung haben (Wert). Die ALTER TABLE Anweisung wird in diesem Fall fehlschlagen, wenn die Tabelle alle Zeilen in ihm hat. Die Lösung ist die NOT NULL Einschränkung von der neuen Spalte entweder zu entfernen oder eine DEFAULT Einschränkung für diese Entscheidung.

Die Basisversion mit zwei Zeilen nur

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

Verwendung:

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

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

Wenn Sie mehrere Spalten hinzufügen möchten, können Sie es auf diese Weise zum Beispiel tun:

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

Verwendung:

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

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

Sie können auf folgende Weise die Sache mit T-SQL tun.

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

Neben können Sie verwenden SQL Server Management Studio auch durch einen Rechtsklick Tabelle in dem Entwurf Menü Einstellung den Standardwert-Tabelle.

Und außerdem, wenn Sie die gleiche Spalte hinzufügen möchten (falls es nicht existiert) für alle Tabellen in der Datenbank, dann verwenden:

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

In SQL Server 2008-R2, gehe ich in dem Design-Modus - in einer Testdatenbank - und fügen Sie meine beiden Spalten mithilfe des Designers und machte die Einstellungen mit der GUI, und dann der berüchtigte Rechtsklick gibt die Option " generieren Change Script "

Bang up öffnet sich ein kleines Fenster mit, Sie ahnen es, die richtig formatiert garantiert zu arbeiten Änderungsskript. Drücken Sie die Taste einfach.

Wenn Sie eine Spalte zu einer vorhandenen Datenbanktabelle mit einem Standardwert hinzufügen, können wir verwenden:

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

Hier ist eine andere Art und Weise eine Spalte mit einer vorhandenen Datenbank-Tabelle mit einem Standardwert hinzuzufügen.

Ein viel gründlicher SQL-Skript eine Spalte mit einem Standardwert hinzufügen unten wird einschließlich der Überprüfung, ob die Spalte vorhanden ist, bevor auch das Hinzufügen es die Einschränkung checkin und Fallenlassen Sie es, wenn es einen gibt. Dieses Skript auch die Namen, die Einschränkung, damit wir eine schöne Namenskonvention haben (I DF_ mag) und wenn nicht SQL werden uns eine Einschränkung mit einem Namen, der eine zufällig generierte Zahl hat; so ist es schön zu können, auch die Einschränkung nennen.

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

Das sind zwei Möglichkeiten, um eine Spalte zu einer vorhandenen Datenbanktabelle mit einem Standardwert hinzuzufügen.

Alternativ können Sie einen Standard hinzufügen, ohne ausdrücklich die Einschränkung mit Namen:

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

Wenn Sie ein Problem mit bestehenden Standardeinschränkungen bei der Erstellung dieser Einschränkung können sie durch entfernt werden:

alter table [schema].[tablename] drop constraint [constraintname]
ALTER TABLE ADD ColumnName {Column_Type} Constraint

Der MSDN-Artikel ALTER TABLE (Transact-SQL) all alten table-Syntax hat.

Dies kann auch in dem SSMS GUI vorgenommen werden. Ich zeige ein unter Standarddatum, aber der Standardwert kann, was auch immer sein, natürlich.

  1. in der Entwurfsansicht Legen Sie Ihre Tabelle (rechts auf dem Tisch klicken im Objekt Explorer-> Design)
  2. Fügen Sie eine Spalte in der Tabelle (oder klicken Sie auf die Spalte, die Sie aktualisieren möchten, wenn es ist bereits vorhanden)
  3. In Spalte Eigenschaften unten, geben Sie (getdate()) oder abc oder 0 oder was auch immer Sie gewünschten Wert in Standardwert oder Bindung Feld wie unten abgebildet:

 image description hier

Beispiel:

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

Beispiel:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';

Erstellen Sie zunächst eine Tabelle mit dem Namen Student:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

Fügen Sie eine Spalte hinzu:

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

SELECT * 
FROM STUDENT

Die Tabelle erstellt wird und eine Spalte mit einem Standardwert zu einer vorhandenen Tabelle hinzugefügt.

 Bild 1

SQL Server + Alter Table + Spalte hinzufügen + Standardwert unique

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier))
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

Versuchen Sie, diese

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

Das hat eine Menge Antworten, aber ich fühle die Notwendigkeit, diese erweiterte Methode hinzuzufügen. Dies scheint viel länger, aber es ist sehr nützlich, wenn Sie ein NOT NULL-Feld zu einer Tabelle mit Millionen von Zeilen in einer aktiven Datenbank sind hinzuzufügen.

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

Was wird dies tun, ist die Spalte als Nullable-Feld hinzufügen und mit dem Standardwert, aktualisieren Sie alle Felder auf den Standardwert (oder Sie können aussagekräftigere Werte zuweisen), und schließlich wird es die Spalte ändern NOT NULL zu sein.

Der Grund dafür ist, wenn Sie über eine große Tabelle aktualisieren und ein neues nicht null Feld fügen Sie ihn in jede einzelne Zeile zu schreiben hat und hiermit wird die gesamte Tabelle sperren, da sie die Spalte ergänzt und schreibt dann alle Werte.

Diese Methode wird die Nullable-Spalte hinzufügen, die viel schneller von selbst arbeitet, füllt dann die Daten, bevor Sie die nicht null-Status zu setzen.

Ich habe festgestellt, dass in einer Erklärung die ganze Sache tun wird für 4-8 Minuten einen unserer aktivere Tabellen aussperren und ziemlich oft habe ich den Prozess getötet. Diese Methode jedes Teil in der Regel nur wenige Sekunden dauert und verursacht nur eine minimale Verriegelung.

Außerdem, wenn Sie einen Tisch im Bereich von Milliarden von Zeilen kann es sich lohnen, Dosieren Sie das Update wie folgt:

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

    IF @@ROWCOUNT < 1000000
        BREAK;
END

Fügen Sie eine neue Spalte in einer Tabelle:

ALTER TABLE [table]
ADD Column1 Datatype

Beispiel:

ALTER TABLE [test]
ADD ID Int

Wenn der Benutzer wünscht, es automatisch zu machen erhöhte dann:

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

Dies kann durch den folgenden Code erfolgen.

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
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

Von dieser Abfrage Sie 0 eine Spalte von Datentyp integer mit Standardwert hinzufügen kann.

Dies ist für SQL Server:

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

Beispiel:

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

Wenn Sie Einschränkungen hinzufügen dann:

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

Nun, ich jetzt einige Änderungen an meiner vorherigen Antwort. Ich habe festgestellt, dass keine der Antworten IF NOT EXISTS erwähnt. Also werde ich eine neue Lösung davon schaffen, wie ich einige Probleme konfrontiert die Tabelle zu ändern.

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 TaskSheet sind die jeweiligen Tabellennamen und IsBilledToClient ist die neue Spalte, die Sie den Standardwert werden einzufügen und 1. Das bedeutet, dass in der neuen Spalte, was der Wert der bestehenden Reihen sein wird, deshalb wird man dort automatisch eingestellt werden. Sie können jedoch, wie Sie mit dem Respekt des Spalts Typ wollen ändern, wie ich BIT verwendet habe, so dass ich in Standardwert 1.

Ich schlage vor, das obige System, weil ich ein Problem konfrontiert. Was ist also das Problem? Das Problem ist, wenn die IsBilledToClient Spalte tut in der Tabelle Tabelle existiert dann, wenn Sie nur den Teil der unter Ihnen angegebenen Code ausführen wird einen Fehler in dem SQL Server Query Builder. Aber wenn es nicht existiert dann zum ersten Mal wird es kein Fehler sein, wenn ausgeführt wird.

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

SQL Server + Alter Table + Spalte hinzufügen + Standardwert unique ...

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top