Kann ich eine Spalte hinzufügen, die ich als NICHT NULL spezifiziere? Ich möchte den DEFAULT-Wert nicht angeben, aber MS-SQL 2005 sagt:
Mit ALTER TABLE können nur Spalten hinzugefügt werden, die Nullen enthalten können oder für die eine DEFAULT-Definition angegeben ist, oder die hinzugefügte Spalte ist eine Identitäts- oder Zeitstempelspalte. Wenn keine der vorherigen Bedingungen erfüllt ist, muss die Tabelle leer sein, um das Hinzufügen zu ermöglichen dieser Spalte. Die Spalte 'test' kann nicht zur nicht leeren Tabelle 'shiplist' hinzugefügt werden, da sie diese Bedingungen nicht erfüllt.
Wenn JA, teilen Sie mir bitte die Syntax mit. Wenn Nein, geben Sie bitte den Grund an.
sql
sql-server
sql-server-2005
tsql
Saubhagya
quelle
quelle
Antworten:
Nein, das kannst du nicht.
Denn wenn Sie könnten, würde SQL nicht wissen, was als Wert in die bereits vorhandenen Datensätze eingefügt werden soll. Wenn Sie keine Datensätze in der Tabelle hätten, würde dies ohne Probleme funktionieren.
Der einfachste Weg, dies zu tun, besteht darin, die Spalte mit einem Standard zu erstellen und dann den Standard zu entfernen.
ALTER TABLE dbo.MyTable ADD MyColumn text NOT NULL CONSTRAINT DF_MyTable_MyColumn DEFAULT 'defaultValue' ALTER TABLE dbo.MyTable DROP CONSTRAINT DF_MyTable_MyColumn
Eine andere Alternative wäre, die Spalte ohne Einschränkung hinzuzufügen, die Werte für alle Zellen zu füllen und die Einschränkung hinzuzufügen.
quelle
Fügen Sie die Spalte zur Tabelle hinzu, aktualisieren Sie die vorhandenen Zeilen, sodass keine von ihnen null ist, und fügen Sie dann eine Einschränkung "nicht null" hinzu.
quelle
Nein - SQL Server lehnt dies vernünftigerweise ab, da es nicht weiß, welchen Wert vorhandene Zeilen haben sollten
Es ist einfach, gleichzeitig ein DEFAULT zu erstellen und es dann sofort zu löschen.
quelle
Ich benutze diesen Ansatz, um die Spalte NOT NULL ohne Standardwert einzufügen
ALTER TABLE [Table] ADD [Column] INT NULL GO UPDATE [Table] SET [Column] = <default_value> ALTER TABLE [Table] ALTER COLUMN [Column] INT NOT NULL
quelle
Nein, du kannst nicht. Sie können jedoch den Standardwert ('') angeben.
quelle
Nein.
Verwenden Sie einfach eine leere Zeichenfolge
''
(im Fall eines Zeichentyps) oder 0 (falls numerisch) usw. als DEFAULT-Wertquelle
Nein, Sie können nicht, da SQL Server oder andere Datenbankmodule diese neue Spalte für vorhandene Zeilen in Ihrer Datentabelle auf Null setzen. Da Sie jedoch kein NULL zulassen, müssen Sie einen Standardwert angeben, um Ihre eigene Einschränkung zu berücksichtigen. Das fällt unter großen Sinn! Die DBE extrapoliert keinen Wert für Nicht-Null-Werte für die vorhandenen Zeilen.
quelle
NOT NULL
Spalte zu einer Tabelle hinzugefügt werden kann, ohne auch a anzugebenDEFAULT
, dessen Ergebnis Nullwerte in einerNOT NULL
Spalte sind. Ich werde Beweise als Antwort liefern ...@ Damien_The_Unbelievers Kommentar : Fügt er eine berechnete Spalte hinzu? Weder Frage noch Antwort implizierten so etwas. Im Fall einer berechneten Spalte lautet der Fehler:
OK, wenn Sie dieses Ratespiel fortsetzen möchten, sehen Sie hier mein Skript, das das Hinzufügen der Spalte "NOT NULL" in einem Schritt "ALTER TABLE" veranschaulicht:
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;
quelle
Ich habe unten Ansatz verwendet, es hat bei mir funktioniert
Syntax: ALTER TABLE <YourTable> ADD <NewColumn> <NewColumnType> NOT NULL DEFAULT <DefaultValue> Example: ALTER TABLE Tablename ADD ColumnName datetime NOT NULL DEFAULT GETDATE();
quelle
Optional können Sie zunächst eine Null-fähige Spalte erstellen, dann Ihre Tabellenspalte mit gültigen Nicht-Null-Werten aktualisieren und schließlich die ALTER-Spalte, um die NOT NULL-Einschränkung festzulegen:
ALTER TABLE MY_TABLE ADD STAGE INT NULL GO UPDATE MY_TABLE SET <a valid not null values for your column> GO ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL GO
quelle