tutorial - t-sql befehle übersicht




Kann ich eine Nicht-Null-Spalte ohne DEFAULT-Wert hinzufügen? (6)

Kann ich eine Spalte hinzufügen, die ich als NOT NULL angegeben habe, ich möchte den DEFAULT-Wert nicht angeben, aber MS-SQL 2005 sagt:

ALTER TABLE erlaubt nur das Hinzufügen von Spalten, die Nullen enthalten können oder eine DEFAULT-Definition haben, oder die Spalte, die hinzugefügt wird, ist eine Identitäts- oder Zeitstempelspalte, oder wenn keine der vorherigen Bedingungen erfüllt ist, muss die Tabelle leer sein, um eine Addition zu ermöglichen dieser Spalte. Die Spalte 'test' kann nicht zu der nicht leeren 'shiplist' der Tabelle hinzugefügt werden, da sie diese Bedingungen nicht erfüllt.

Wenn JA, bitte lassen Sie mich die Syntax wissen, wenn Nein bitte den Grund angeben.


@ Damien_The_Unbeliever's Kommentar , Ist es berechnete Spalte hinzufügen? Weder die Frage noch die Antwort impliziert etwas Ähnliches. Im Falle einer berechneten Spalte lautet der Fehler:

"Für berechnete Spalten können nur UNIQUE- oder PRIMARY KEY-Einschränkungen erstellt werden, während CHECK-, FOREIGN KEY- und NOT NULL-Bedingungen erfordern, dass berechnete Spalten beibehalten werden."

OK, wenn dieses Ratespiel fortgesetzt werden soll, hier ist mein Skript, das das Hinzufügen der Spalte "NOT NULL" in einem "ALTER TABLE" -Schritt illustriert:

CREATE TABLE TestInsertComputedColumn 
(
    FirstName VARCHAR(100),
    LastName CHAR(50)
);  

insert into TestInsertComputedColumn(FirstName,LastName)
     select 'v', 'gv8';
select * from TestInsertComputedColumn;

ALTER TABLE TestInsertComputedColumn 
      ADD FullName As FirstName + LastName PERSISTED NOT NULL;

select * from TestInsertComputedColumn;
--drop TABLE TestInsertComputedColumn;

Fügen Sie die Spalte zur Tabelle hinzu, aktualisieren Sie die vorhandenen Zeilen, sodass keine davon null ist, und fügen Sie dann eine Einschränkung "not null" hinzu.


Nein - SQL Server lehnt dies vernünftigerweise ab, weil es nicht wissen würde, welchen Wert vorhandene Zeilen haben sollten

Es ist einfach, gleichzeitig DEFAULT zu erstellen und dann sofort zu löschen.


Nein, Sie können nicht, da SQL Server oder andere Datenbank-Engines diese neue Spalte für vorhandene Zeilen in Ihrer Datentabelle als null festlegen. Da Sie jedoch NULL nicht zulassen, müssen Sie einen Standardwert angeben, um Ihre eigene Einschränkung einzuhalten. Das fällt unter großen Sinn! Die DBE wird keinen Wert für Nicht-Null-Werte für die vorhandenen Zeilen extrapolieren.


Nein, du kannst nicht. Sie können jedoch in Erwägung ziehen, den Standardwert für ('') anzugeben.


Nein.

Verwenden Sie einfach den leeren String '' (im Fall von Zeichentypen) oder 0 (wenn numerisch) usw. als DEFAULT-Wert





tsql