3261 Stimmen

Hinzufügen einer Spalte mit einem Standardwert zu einer vorhandenen Tabelle in SQL Server

Wie kann ich eine Spalte mit einem Standardwert zu einer bestehenden Tabelle in SQL-Server 2000 / SQL Server 2005 ?

12 Stimmen

Warum gibt es auf diese Frage 41 Antworten? Wenn ich sie durchsehe, sagen die meisten das Gleiche. Warum werden diese nicht entfernt? Diese Frage braucht nur maximal 3 Antworten.

0 Stimmen

ALTER TABLE SomeTable ADD SomeCol Bit NULL --O NOT NULL. CONSTRAINT D_SomeTable_SomeCol --Wenn ausgelassen, wird ein Default-Constraint Name automatisch generiert. DEFAULT (0)--Optionale Standard-Beschränkung. WITH VALUES --Hinzufügen, wenn die Spalte nullbar ist und Sie den Standardwert für existierende Datensätze haben wollen.

1 Stimmen

@MichaelZ. - 43 Antworten jetzt .....

24voto

Ste Bov Punkte 816

Hier gibt es viele Antworten, aber ich habe das Bedürfnis, diese erweiterte Methode hinzuzufügen. Sie scheint viel länger zu sein, ist aber äußerst nützlich, wenn Sie ein NOT NULL-Feld zu einer Tabelle mit Millionen von Zeilen in einer aktiven Datenbank hinzufügen wollen.

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

Dadurch wird die Spalte als löschbares Feld und mit dem Standardwert hinzugefügt, alle Felder werden auf den Standardwert aktualisiert (oder Sie können aussagekräftigere Werte zuweisen), und schließlich wird die Spalte in NOT NULL geändert.

Der Grund dafür ist, wenn Sie eine große Tabelle aktualisieren und ein neues Nicht-Null-Feld hinzufügen, muss in jede einzelne Zeile geschrieben werden und dadurch wird die gesamte Tabelle gesperrt, da die Spalte hinzugefügt und dann alle Werte geschrieben werden.

Diese Methode fügt die löschbare Spalte hinzu, die von sich aus viel schneller arbeitet, und füllt dann die Daten, bevor der Nicht-Null-Status gesetzt wird.

Ich habe festgestellt, dass die Durchführung des gesamten Vorgangs in einer einzigen Anweisung eine unserer aktiveren Tabellen für 4-8 Minuten sperrt, und oft habe ich den Prozess abgebrochen. Bei dieser Methode dauert jeder Teil normalerweise nur ein paar Sekunden und verursacht nur minimale Sperren.

Wenn Sie eine Tabelle mit Milliarden von Zeilen haben, kann es sich außerdem lohnen, die Aktualisierung wie folgt zu stapeln:

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

    IF @@ROWCOUNT < 1000000
        BREAK;
END

22voto

Naveen Desosha Punkte 337

SQL Server + Tabelle ändern + Spalte hinzufügen + Standardwert uniqueidentifier

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

22voto

Jakir Hossain Punkte 421

Versuchen Sie dies

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

21voto

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

20voto

Jeevan Gharti Punkte 439
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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X