Soru SQL Server'da varolan bir tabloya varsayılan değeri olan bir sütun ekleyin.


Varsayılan bir değere sahip bir sütun, mevcut bir tabloya nasıl eklenebilir? SQL Server 2000 / SQL Server 2005?


2297
2017-09-18 12:30


Menşei


ve bu da w3schools.com/sql/sql_alter.asp - Academy of Programmer


Cevaplar:


Sözdizimi:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Örnek:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

Notlar:

İsteğe Bağlı Kısıtlama Adı:
Eğer dışarı çıkarsan CONSTRAINT D_SomeTable_SomeCol sonra SQL Server otomatik olarak
gibi komik bir ad ile bir varsayılan-contraint: DF__SomeTa__SomeC__4FB7FEF6

İsteğe Bağlı Değerler Beyanı:
WITH VALUES Sadece Sütun Nullable olduğunda gereklidir
ve Mevcut Kayıtlar için Kullanılan Varsayılan Değeri istiyorsunuz.
Senin sütun ise NOT NULLsonra otomatik olarak Varsayılan Değeri kullanacaktır
belirttiğiniz tüm mevcut kayıtlar için WITH VALUES ya da değil.

Ekleyiciler, bir Varsayılan Kısıtlama ile nasıl çalışır?
Eğer içine bir kayıt eklerseniz SomeTable ve yap değil belirtmek SomeColdeğeri, o zaman 0.
Bir kayıt eklerseniz ve belirtmek SomeColdeğeri NULL (ve sütununuz boş değerlere izin verir),
sonra Varsayılan Kısıtlama değil Kullanılmalı ve NULL Değer olarak eklenecektir.

Notlar, herkesin aşağıdaki harika geri bildirimlerine dayanıyordu.
Özellikle ..... 'ya teşekkür:
@Yatrix, @WalterStabosz, @YahooSerious ve Yorumlar için @StackMan.


2920
2017-09-18 12:34



Sütunun null olması durumunda, null'ın varolan satırlar için kullanılan değer olacağını unutmayın. - Richard Collette
@Thecrocodilehunter Nullable sütunu, sütun değeri için Null ekleyebileceğiniz anlamına gelir. NULL olmayan bir sütun değilse, bu veri türünün bir değerini eklemeniz gerekir. Bu nedenle, mevcut kayıtlar için, Null bunlara eklenir ve yeni kayıtlarda, aksi belirtilmedikçe varsayılan değeriniz eklenir. Mantıklı olmak? - Yatrix
Bu cevabı dbugger'dan biraz daha iyi seviyorum çünkü varsayılan kısıtlamayı açıkça belirtiyor. Adın otomatik olarak oluşturulmasından başka, dbugger'ın sözdizimi kullanılarak varsayılan bir kısıtlama oluşturulur. DROP-CREATE komut dosyaları yazarken tam adı bilmek kullanışlı. - Walter Stabosz
@Vertigo Eğer sütun ise SADECE doğrudur NOT NULL. Lütfen şunu deneyin: create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah; Sütun için 2 NULL değeri göreceksiniz b. - ErikE
kullanım WITH VALUES Mevcut null satırları güncellemek için Görmek MSDN: "Eklenen sütun boş değerlere izin veriyorsa ve WITH VALUES belirtilirse, varsayılan değer yeni sütuna eklenir, varolan satırlara eklenir. " - Yahoo Serious


ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

Dahil edilmesi VARSAYILAN sütunu doldurur mevcut Varsayılan değere sahip satırlar, bu nedenle NOT NULL kısıtlaması ihlal edilmez.


869
2017-09-18 12:31



Bu cevaptaki problem, varsayılan değerin sadece yeni kayıtlar için geçerli olmasıdır. Mevcut kayıtlar hala NULL değerine sahip olacak. - Roee Gavirel
Durum böyle değil. Aksi halde kısıtlama ihlal edilir. - dbugger
Mevcut satırlardaki sütunlar varsayılan değerle doldurulur. Biraz ampirik test bunu kanıtlayacaktır. - dbugger
Sadece açıklığa kavuşturmak için - "NOT NULL" komuttan çıkarılırsa, varolan satırların değeri güncellenmez ve NULL olarak kalır. Komutta "NULL" YOK varsa, varolan satırların değeri varsayılanla eşleşecek şekilde güncellenecektir. - Stack Man
Birden çok sütun için ALTER TABLE table_1 EKLE col_1 int NULL DEFAULT DEĞİL (1), col_2 int NULL - aads


Eklerken bir null sütun, WITH VALUES belirli DEFAULT değerinin varolan satırlara uygulanacağından emin olur:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES

196
2018-04-12 17:40



Bu önemli bir noktadır. Bir sütun ile bir sütun almak kolaydır DEFAULT Kısıtlama her zaman bir değere sahip olacaktır - neyse, NULL olmamasına rağmen NOT NULL belirtilmemiş. - Bill Brinkley
@tkocmathla uh, ben BIT veri türü, bu konuda konuşuyordum BIT  kolon. Yanıta bakın, sütun şu şekilde bildirildi: NOT NULL. - rsenna


ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO

115
2017-09-18 12:39



Yeni "değil nullable" sütunu, varsayılan değer kısıtlamadan önce oluşturulduğundan, tablo zaten içeriğe sahipse bu işe yaramaz - WDuffy
+ 1'im, ilk önce snippet'e gider GO Mevcut bir sütuna bir kısıtlama ekler. - Barry Guvenkaya


ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

104
2017-08-05 03:28



Bu ekle null! önce null olmamalı - baaroz
@baaroz, bu NOT NULL ile çalışır: ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR (200) NOT NULL DEFAULT 'SNUGGLES' - stom


Eklediğiniz sütunun bir NOT NULL kısıtlama, henüz yok DEFAULT kısıtlama (değer). ALTER TABLE Tabloda herhangi bir satır varsa, bu durumda başarısız olur. Çözüm ya kaldırmaktır NOT NULL yeni sütundan kısıtlama veya DEFAULT bunun için kısıtlama.


84
2017-09-24 16:03



herhangi SQL örneği hakkında ? - Kiquenet


Sadece iki satırlı en basit versiyon

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

78
2018-05-25 14:50