von - Fügen Sie einer vorhandenen Tabelle in SQL Server eine Spalte mit einem Standardwert hinzu




sqlite spalte hinzufügen (20)

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.

Anmerkungen:

Optionaler Einschränkungsname:
Wenn Sie CONSTRAINT D_SomeTable_SomeCol wird der SQL Server CONSTRAINT D_SomeTable_SomeCol
eine Default- DF__SomeTa__SomeC__4FB7FEF6 mit einem lustigen Namen wie: DF__SomeTa__SomeC__4FB7FEF6

Optionale With-Values-Anweisung:
Die WITH VALUES werden nur benötigt, wenn Ihre Spalte nullfähig ist
und Sie möchten, dass der Standardwert für vorhandene Datensätze verwendet wird.
Wenn Ihre Spalte NOT NULL , wird automatisch der Standardwert verwendet
für alle vorhandenen Datensätze, unabhängig davon, ob Sie WITH VALUES angeben oder nicht.

Wie Inserts mit einer Default-Einschränkung funktionieren:
Wenn Sie einen Datensatz in SomeTable und den Wert von SomeTable nicht SomeCol , wird der Standardwert auf 0 .
Wenn Sie einen Datensatz einfügen und den Wert von SomeCol als NULL angeben (und Ihre Spalte erlaubt NULL Werte),
Dann wird die Default-Einschränkung nicht verwendet und NULL wird als Wert eingefügt.

Die Anmerkungen basierten auf dem großartigen Feedback aller.
Besonderer Dank an:
@Yatrix, @WalterStabosz, @YahooSerious und @StackMan für ihre Kommentare.

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


Alternativ können Sie einen Standard hinzufügen, ohne die Einschränkung explizit benennen zu müssen:

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

Wenn beim Erstellen dieser Einschränkung ein Problem mit vorhandenen Standardeinschränkungen auftritt, können diese entfernt werden durch:

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

Beispiel:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';

Benutzen:

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

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

Das hat viele Antworten, aber ich habe das Bedürfnis, diese erweiterte Methode hinzuzufügen. Dies scheint viel länger zu sein, aber es ist äußerst nützlich, wenn Sie einer Tabelle mit Millionen von Zeilen in einer aktiven Datenbank ein NOT NULL-Feld hinzufü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

Dazu wird die Spalte als nullwertfähiges Feld hinzugefügt. Mit dem Standardwert werden alle Felder auf den Standardwert aktualisiert (oder Sie können aussagekräftigere Werte zuweisen). Schließlich wird die Spalte in NOT NULL geändert.

Der Grund dafür ist, wenn Sie eine Tabelle mit großem Maßstab aktualisieren und ein neues Nicht-Null-Feld hinzufügen, das in jede einzelne Zeile geschrieben werden muss. Dadurch wird die gesamte Tabelle gesperrt, während sie die Spalte hinzufügt und dann alle Werte schreibt.

Diese Methode fügt die nullfähige Spalte hinzu, die von selbst viel schneller arbeitet, und füllt dann die Daten, bevor der Nicht-Null-Status festgelegt wird.

Ich habe festgestellt, dass das Durchführen der gesamten Sache in einer Anweisung einen unserer aktiveren Tische für 4-8 Minuten aussperrt, und oft habe ich den Prozess abgebrochen. Diese Methode dauert in der Regel nur wenige Sekunden und führt zu einer minimalen Blockierung.

Wenn Sie eine Tabelle im Bereich von Milliarden von Zeilen haben, lohnt es sich möglicherweise, 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

Die einfachste Version mit nur zwei Zeilen

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

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

Fügen Sie einer Tabelle eine neue Spalte hinzu:

ALTER TABLE [table]
ADD Column1 Datatype

Zum Beispiel,

ALTER TABLE [test]
ADD ID Int

Wenn der Benutzer es automatisch erhöhen möchte, gilt Folgendes:

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

Nun, ich habe jetzt einige Änderungen an meiner vorherigen Antwort vorgenommen. Ich habe bemerkt, dass keine der genannten Antworten IF NOT EXISTS . Deshalb werde ich eine neue Lösung anbieten, da ich einige Probleme hatte, die Tabelle zu verä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 ist TaskSheet der bestimmte Tabellenname, und IsBilledToClient ist die neue Spalte, die Sie einfügen IsBilledToClient , und 1 der Standardwert. Das heißt in der neuen Spalte, was der Wert der vorhandenen Zeilen sein wird, also wird automatisch eine gesetzt. Sie können jedoch in Bezug auf den Spaltentyp beliebig ändern, so wie ich BIT verwendet habe. BIT habe ich den Standardwert 1 festgelegt.

Ich schlage das obige System vor, weil ich ein Problem hatte. Was ist also das Problem? Das Problem ist, wenn die IsBilledToClient Spalte in der Tabellentabelle vorhanden ist. Wenn Sie nur den unten angegebenen Teil des Codes ausführen, wird ein Fehler im SQL Server Query Builder angezeigt. Wenn es aber nicht existiert, wird es beim ersten Mal zum ersten Mal keinen Fehler geben.

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

Passen Sie auf, wenn die hinzugefügte Spalte eine NOT NULL Einschränkung hat, jedoch keine DEFAULT Einschränkung (Wert). Die ALTER TABLE Anweisung schlägt in diesem Fall fehl, wenn die Tabelle Zeilen enthält. Die Lösung besteht darin, entweder die NOT NULL Einschränkung aus der neuen Spalte zu entfernen oder eine DEFAULT Einschränkung dafür bereitzustellen.


SQL Server + Alterstabelle + Spalte hinzufügen + Standardwert uniqueidentifier

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

Sie können das mit T-SQL auf folgende Weise machen.

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

Sie können SQL Server Management Studio auch verwenden, indem Sie im Menü Entwurf mit der rechten Maustaste auf Tabelle klicken und den Standardwert auf Tabelle setzen.

Wenn Sie allen Tabellen in der Datenbank dieselbe Spalte hinzufügen (falls nicht vorhanden), verwenden Sie Folgendes:

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

Versuche dies

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

Wenn Sie eine Spalte mit WITH VALUES hinzufügen, stellt WITH VALUES sicher, dass der spezifische DEFAULT-Wert auf vorhandene Zeilen angewendet wird:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES

Wenn der Standardwert Null ist, gilt Folgendes:

  1. Öffnen Sie in SQL Server die Baumstruktur der Zieltabelle
  2. Klicken Sie mit der rechten Maustaste auf "Spalten" ==> New Column
  3. Geben Sie die Spalte Name, Select Type auswählen und das Kontrollkästchen Nullen zulassen ein
  4. Klicken Save der Menüleiste auf Save

Erledigt!


Erstellen Sie zuerst 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 wird erstellt und eine Spalte mit einem Standardwert zu einer vorhandenen Tabelle hinzugefügt.


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 ADD ColumnName {Column_Type} Constraint

Der MSDN-Artikel ALTER TABLE (Transact-SQL) enthält alle Syntax der alter-Tabelle.


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

Die Einbeziehung von DEFAULT füllt die Spalte in vorhandenen Zeilen mit dem Standardwert, sodass die NOT NULL-Einschränkung nicht verletzt wird.


ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

Von dieser Abfrage aus können Sie eine Spalte mit dem Datentyp Integer mit dem Standardwert 0 hinzufügen.





sql-server-2000