Bagaimana Anda mengubah tipe data kolom di SQL Server?

Jawaban:

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

SEDIKIT Seperti dicatat NULL / BUKAN NULL seharusnya ditentukan, lihat jawaban Rob juga.

cmsjr
sumber
1
Mengapa harus ditentukan? Apa manfaatnya? Semua yang ingin saya tinggalkan karena saya tidak perlu menyebutkannya, saya pikir.
Jan
5
@TheincredibleJan Itu akan keren, tapi sayangnya tidak berfungsi seperti itu. Jika Anda mengeluarkan ALTER TABLE TableName ALTER COLUMN ColumnNameperintah untuk mengubah kolom yang ada [NOT NULL], dan Anda tidak menentukannya secara eksplisit, itu akan menjadi [NULL]sesudahnya, karena itu adalah default.
takrl
4
Ini hanya berfungsi jika Anda tidak memiliki kendala dan indeks pada kolom itu, jika tidak, Anda harus meninggalkan semuanya dan membuatnya kembali, yang merupakan pekerjaan yang membosankan dan kasar, terutama jika Anda memiliki banyak referensi asing pada kolom itu. misalnya ketika mengubah dari tinyint ke int.
Hrvoje Batrnek
Hati-hati jika Anda memiliki IDE terbuka (seperti SSMS). Bahkan dengan Tab Desainer saya ditutup pada Tabel Saya Mengubah (setelah menjalankan skrip dan mengklik kanan pada Tabel untuk memilih "Desain") itu masih menunjukkan Tipe Data lama! Hanya setelah menutup SEMUA Tab saya di Studio Manajemen dan membuka Tampilan Desain lagi yang akhirnya menunjukkan DataType yang diperbarui. Sangat menakutkan, jadi berhati-hatilah (itu mungkin bug-cache yang sudah diperbaiki sekarang atau satu MS tidak pernah mengganggu perbaikan). Bagi mereka yang bertanya-tanya mengapa saya menjalankan T-SQL ketika saya menggunakan Design-View, saya ingin mengubah DataTypes saya SysName(yang SSMS tidak izinkan).
MikeTeeVee
Saya tidak beruntung dengan perintah ini di XAMPP. ALTER TABLE table MODIFY COLUMN column datatypebekerja untukku.
Pavindu
173

Jangan lupa nullability.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]
Rob Garrison
sumber
2
Ada apa dengan nullability? Jika saya tidak ingin mengubahnya - apa manfaatnya mengaturnya lagi?
Jan
7
^ Ini akan default ke NULL setelah pernyataan tabel alter selesai dieksekusi tanpa secara eksplisit mendefinisikan apa yang seharusnya.
sc305495
1
@ sc305495 ​​Tepatnya, ini akan menjadi default ke mana pun pengaturan ANSI_NULL_DEFAULT Anda.
Zikato
23

Gunakan pernyataan tabel Alter.

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

Sintaks untuk memodifikasi kolom dalam tabel yang ada di SQL Server (Transact-SQL) adalah:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

Sebagai contoh:

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

ALTER TABLEContoh SQL Server ini akan memodifikasi kolom yang dipanggil last_nameuntuk menjadi tipe data VARCHAR(75)dan memaksa kolom untuk tidak mengizinkan nilai nol.

lihat di sini

Yogesh Bende
sumber
1
tolong tambahkan lebih banyak informasi ke jawaban Anda dan format kode / kueri!
Sebastian Brosch
4

Selama Anda meningkatkan ukuran varchar Anda, Anda baik-baik saja. Sesuai referensi Tabel Alter :

Mengurangi presisi atau skala kolom dapat menyebabkan pemotongan data.

jocassid
sumber
3

Untuk mengubah tipe data

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

Untuk mengubah kunci Utama

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)
Alexander Zaldostanov
sumber
1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL
Muhammad Omair
sumber
Ini sepertinya tidak menambahkan apa pun atas jawaban yang diterima yang ada dari tahun lalu, dan juga perubahan yang Anda poskan ke struktur tabel tidak benar-benar cocok dengan pertanyaan.
PeterJ
-11

Coba ini:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";
Kai Tzer
sumber
1
"Ubah" jelas tidak benar. Silakan bandingkan dengan jawaban lain.
Frank
3
Ini sudah tua, tetapi tampaknya Kai Tzer membuktikan MySql dan / atau Oracle DDLs.
Sheldon Cohen
1
Setuju dengan Sheldon, jawaban di sini tidak membantu saya dengan sql oracle, hanya ini
AsfK