SQL Server'da bir sütunun veri türünü nasıl değiştirirsiniz?


Yanıtlar:


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

DÜZENLEME Belirtildiği gibi NULL / NOT NULL belirtilmiş olmalıdır, Rob'un cevabına da bakınız .


1
Neden belirtilmelidir? Avantajı nedir? Ayrılmak istediğim her şeyi olduğu gibi bahsetmek zorunda değilim.
İnanılmaz Ocak

5
@TheincredibleJan Güzel olurdu, ama maalesef bu şekilde çalışmıyor. ALTER TABLE TableName ALTER COLUMN ColumnNameVarolan bir sütunu değiştirmek için bir komut [NOT NULL]verirseniz ve bunu açıkça belirtmezseniz [NULL], varsayılan olarak bu daha sonra olacaktır .
takrl

4
Bu, yalnızca bu sütun üzerinde kısıtlamalarınız ve dizinleriniz yoksa çalışır, aksi takdirde, her şeyi bırakmanız ve yeniden oluşturmanız gerekir, bu da sıkıcı ve homurdanan bir iştir, özellikle de bu sütunda birçok yabancı referansınız varsa. örneğin tinyint'ten int.
Hrvoje Batrnek

Açık bir IDE'niz varsa (SSMS gibi) dikkatli olun. Tasarımcı Tab'ım Masada kapalıyken bile değiştirdim (betiği çalıştırdıktan ve "Tasarım" ı seçmek için Masaya sağ tıkladıktan sonra) hala eski Veri Türlerini gösterdi! Yalnızca TÜM Sekmelerimi Management Studio'da kapatıp Tasarım Görünümünü tekrar açtıktan sonra nihayet güncellenen DataType'ı gösterdi. Çok korkutucu, bu yüzden dikkatli olun (şimdiye kadar düzeltilmiş bir önbellek hatası olabilir veya bir MS sabitlemeyi asla rahatsız etmez). Design-View kullandığımda neden T-SQL çalıştırdığımı merak edenler için, DataTyp'lerimi değiştirmek istedim SysName(SSMS'nin izin vermediği).
MikeTeeVee

XAMPP'de bu komutlarla hiç şansım olmadı. ALTER TABLE table MODIFY COLUMN column datatypebenim için çalıştı.
Pavindu

173

Nullabiliteyi unutmayın.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]

2
Nullabilite ile ilgili sorun nedir? Değiştirmek istemiyorsam - tekrar ayarlamanın faydası nedir?
İnanılmaz Ocak

7
^ Alter tablo deyiminin ne olması gerektiği açıkça tanımlanmadan yürütmeyi bitirdikten sonra varsayılan olarak NULL olacaktır.
sc305495

1
@ sc305495 ​​Kesin olarak, ANSI_NULL_DEFAULT ayarınız ne olursa olsun varsayılan ayar olacaktır.
Zikato

23

Alter tablosu deyimini kullanın.

Alter table TableName Alter Column ColumnName nvarchar(100)

13

SQL Server'da (Transact-SQL) varolan bir tabloda bir sütunu değiştirmek için sözdizimi şöyledir:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

Örneğin:

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

Bu SQL Server ALTER TABLEörneği, last_nameveri türü olarak adlandırılan sütunu değiştirir ve sütunu VARCHAR(75)boş değerlere izin vermemeye zorlar.

buraya bakın


1
lütfen cevabınıza daha fazla bilgi ekleyin ve kodu / sorguyu biçimlendirin!
Sebastian Brosch

4

Varchar'ınızın boyutunu artırdığınız sürece sorun olmaz. Gereğince Alter Tablo referans:

Bir sütunun hassasiyetini veya ölçeğini azaltmak veri kesilmesine neden olabilir.


3

Veri türünü değiştirmek için

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

Birincil anahtarı değiştirmek için

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)

1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL

Bu, yıllar önce var olan kabul edilen cevaba bir şey eklemiyor gibi görünüyor ve ayrıca tablo yapısında yayınladığınız değişiklikler aslında soruyla eşleşmiyor.
PeterJ

-11

Bunu dene:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";

1
"Değiştir" kesinlikle doğru değil. Lütfen diğer cevaplarla karşılaştırın.
Frank

3
Bu eski, ama Kai Tzer MySql ve / veya Oracle DDL'leri kanıtlıyor gibi görünüyor.
Sheldon Cohen

1
Sheldon ile aynı
fikirde
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.