Wie ändern Sie den Datentyp einer Spalte in SQL Server?

Antworten:

563
ALTER TABLE TableName 
ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]

BEARBEITEN Wie bereits erwähnt, sollte NULL / NOT NULL angegeben werden, siehe auch Robs Antwort .

cmsjr
quelle
1
Warum sollte es angegeben werden? Was ist der Vorteil? Alles, was ich verlassen möchte, muss ich nicht erwähnen, denke ich.
Der unglaubliche
5
@TheincredibleJan Das wäre cool, aber leider funktioniert es nicht so. Wenn Sie einen ALTER TABLE TableName ALTER COLUMN ColumnNameBefehl zum Ändern einer vorhandenen Spalte ausgeben [NOT NULL]und diesen nicht explizit angeben, wird er [NULL]anschließend ausgeführt, da dies die Standardeinstellung ist.
Takrl
4
Dies funktioniert nur, wenn Sie keine Einschränkungen und Indizes für diese Spalte haben. Andernfalls müssen Sie alles löschen und neu erstellen. Dies ist mühsam und mühsam, insbesondere wenn Sie viele ausländische Referenzen in dieser Spalte haben. zB beim Wechsel von tinyint zu int.
Hrvoje Batrnek
Vorsicht, wenn Sie eine IDE geöffnet haben (wie SSMS). Selbst wenn mein Designer-Tab in der Tabelle geschlossen war, die ich geändert habe (nachdem ich das Skript ausgeführt und mit der rechten Maustaste auf die Tabelle geklickt habe, um "Design" auszuwählen), wurden immer noch die alten Datentypen angezeigt! Erst nachdem ALLE meine Registerkarten in Management Studio geschlossen und die Entwurfsansicht erneut geöffnet wurden, wurde der aktualisierte Datentyp angezeigt. Sehr beängstigend, seien Sie also vorsichtig (es kann sich um einen Cache-Fehler handeln, der inzwischen behoben ist, oder eine MS stört die Behebung nie). Für diejenigen, die sich fragen, warum ich T-SQL ausgeführt habe, wenn ich Design-View verwende, wollte ich meine SysNameDatentypen ändern (was SSMS nicht zulässt).
MikeTeeVee
Ich hatte kein Glück mit diesen Befehlen in XAMPP. ALTER TABLE table MODIFY COLUMN column datatypearbeitete für mich.
Pavindu
173

Vergiss die Nullbarkeit nicht.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]
Rob Garrison
quelle
2
Was ist los mit der Nullbarkeit? Wenn ich es nicht ändern möchte - was bringt es, es erneut einzustellen?
Der unglaubliche
7
^ Nach Abschluss der Ausführung der Anweisung alter table wird standardmäßig NULL verwendet, ohne explizit zu definieren, was sie sein soll.
sc305495
1
@ sc305495 ​​Um genau zu sein, wird standardmäßig festgelegt, wann immer Ihre ANSI_NULL_DEFAULT-Einstellungen sind.
Zikato
23

Verwenden Sie die Anweisung Alter table.

Alter table TableName Alter Column ColumnName nvarchar(100)
John Sansom
quelle
13

Die Syntax zum Ändern einer Spalte in einer vorhandenen Tabelle in SQL Server (Transact-SQL) lautet:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

Zum Beispiel:

ALTER TABLE employees
    ALTER COLUMN last_name VARCHAR(75) NOT NULL;

In diesem SQL Server- ALTER TABLEBeispiel wird die Spalte geändert last_name, die als Datentyp bezeichnet wirdVARCHAR(75) und die Spalte wird gezwungen, keine Nullwerte zuzulassen.

siehe hier

Yogesh Bende
quelle
1
Bitte fügen Sie Ihrer Antwort weitere Informationen hinzu und formatieren Sie den Code / die Abfrage!
Sebastian Brosch
4

Solange Sie die Größe Ihres Varchars erhöhen, sind Sie in Ordnung. Gemäß der Referenz " Tabelle ändern":

Das Verringern der Genauigkeit oder des Maßstabs einer Spalte kann zum Abschneiden von Daten führen.

jocassid
quelle
3

Zum Ändern des Datentyps

alter table table_name 
alter column column_name datatype [NULL|NOT NULL]

Zum Ändern des Primärschlüssels

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)
Alexander Zaldostanov
quelle
1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL
Muhammad Omair
quelle
Dies scheint nichts über die bestehende akzeptierte Antwort von vor Jahren hinzuzufügen, und auch die Änderungen, die Sie an der Tabellenstruktur vorgenommen haben, stimmen nicht mit der Frage überein.
PeterJ
-11

Versuche dies:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";
Kai Tzer
quelle
1
"Ändern" ist offensichtlich nicht korrekt. Bitte vergleichen Sie mit anderen Antworten.
Frank
3
Dies ist alt, aber es scheint, dass Kai Tzer MySql- und / oder Oracle-DDLs bewiesen hat.
Sheldon Cohen
1
Stimmen Sie mit Sheldon überein, die Antworten hier haben mir bei Oracle SQL nicht geholfen, nur das
AsfK