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

18voto

Chiragkumar Thakar Punkte 3376

Hinzufügen einer neuen Spalte zu einer Tabelle:

ALTER TABLE [table]
ADD Column1 Datatype

Zum Beispiel,

ALTER TABLE [test]
ADD ID Int

Wenn der Benutzer möchte, dass sie automatisch erhöht wird, dann:

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

17voto

ishant kaushik Punkte 643

Es gibt 2 verschiedene Möglichkeiten, dieses Problem zu lösen. Beide fügen einen Standardwert hinzu, geben der Problemstellung aber eine völlig andere Bedeutung.

Beginnen wir mit der Erstellung einiger Beispieldaten.

Beispieldaten erstellen

CREATE TABLE ExistingTable (ID INT)
GO
INSERT INTO ExistingTable (ID)
VALUES (1), (2), (3)
GO
SELECT *
FROM ExistingTable

enter image description here

1. spalten mit Standardwert für zukünftige Einfügungen hinzufügen

ALTER TABLE ExistingTable
ADD ColWithDefault VARCHAR(10) DEFAULT 'Hi'
GO

enter image description here

Da wir nun eine Standardspalte hinzugefügt haben, wird der Wert beim Einfügen eines neuen Datensatzes standardmäßig auf 'Hi' wenn kein Wert angegeben wird

INSERT INTO ExistingTable(ID)
VALUES (4)
GO
Select * from ExistingTable
GO

enter image description here

Damit ist das Problem des Standardwerts gelöst, aber es gibt einen Haken an der Sache. Was, wenn wir den Standardwert in allen Spalten haben wollen, nicht nur in den zukünftigen Einfügungen? Hierfür gibt es Methode 2.

2. eine Spalte mit Standardwert für ALLE Einfügungen hinzufügen

ALTER TABLE ExistingTable
ADD DefaultColWithVal VARCHAR(10) DEFAULT 'DefaultAll'
WITH VALUES
GO
Select * from ExistingTable
GO

enter image description here

Das folgende Skript fügt eine neue Spalte mit einem Standardwert für jedes mögliche Szenario hinzu.

Ich hoffe, dass dies einen Mehrwert für die gestellte Frage darstellt. Danke!

15voto

Anshul Dubey Punkte 320

Versuchen Sie es mit der folgenden Abfrage:

ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue

Dadurch wird eine neue Spalte in die Tabelle eingefügt.

13voto

Mohit Dagar Punkte 474

Dies kann mit dem folgenden Code geschehen.

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

11voto

gdmanandamohon Punkte 2211

Nun, ich habe meine vorherige Antwort etwas abgeändert. Mir ist aufgefallen, dass in keiner der Antworten erwähnt wurde IF NOT EXISTS . Ich werde also eine neue Lösung anbieten, da ich einige Probleme mit der Änderung der Tabelle hatte.

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 ist der Name der jeweiligen Tabelle und IsBilledToClient ist die neue Spalte, die Sie einfügen wollen, und 1 den Standardwert. Das bedeutet, dass in der neuen Spalte der Wert der vorhandenen Zeilen stehen wird, also wird dort automatisch einer eingestellt. Sie können jedoch nach Belieben den Spaltentyp ändern, wie ich es getan habe BIT also habe ich den Standardwert 1 eingegeben.

Ich schlage das obige System vor, weil ich ein Problem hatte. Worin besteht also das Problem? Das Problem ist, wenn die IsBilledToClient Spalte in der Tabelle existiert, dann werden Sie, wenn Sie nur den unten angegebenen Teil des Codes ausführen, einen Fehler im SQL Server Query Builder sehen. Wenn die Spalte jedoch nicht vorhanden ist, tritt bei der ersten Ausführung kein Fehler auf.

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

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