Yanıtlar:
Bir seçenek olarak, başlangıçta Null olabilen sütun oluşturabilir, ardından tablo sütununuzu geçerli boş olmayan değerlerle güncelleyebilir ve son olarak, NOT NULL kısıtını ayarlamak için ALTER sütununu değiştirebilirsiniz:
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
Diğer bir seçenek, sütununuz için doğru varsayılan değeri belirlemektir:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: Lütfen yukarıdaki cevabın GO
, bu kodu Microsoft SQL sunucusunda çalıştırdığınızda gerekli olanı içerdiğini unutmayın . Oracle veya MySQL'de aynı işlemi gerçekleştirmek istiyorsanız, şu şekilde noktalı virgül kullanmanız gerekir ;
:
ALTER TABLE MY_TABLE ADD STAGE INT NULL;
UPDATE MY_TABLE SET <a valid not null values for your column>;
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL;
update
ifade, herhangi bir sorguda zararlı olacaktır. update
Buradaki ifadede fazladan bir sütununuz olup olmadığını görmek yeterince basit olmalıdır . Genelde bir seferde yalnızca bir veya iki sütun eklersiniz. update
İfadenize oraya ait olmayan fazladan bir sütun eklerseniz , bu örnekte, belki de ilk etapta verilerden sorumlu olmamanız gerekir.
ALTER COLUMN
desteklenmediğini unutmayın.
GO
ve SQL spesifikasyonunun bir parçası değil gibi görünüyor , bu nedenle muhtemelen onu destekleyen araçlardan biri tarafından çalıştırılmayan komut dosyalarının başarısızlığına yol açacaktır. Sadece noktalı virgül mü kullanıyorsunuz? Herhangi bir yerleşik ve makul standardı nadiren önemsedikleri için Microsoft standartlarının yayılmasını önermiyorum, sadece kendi icatlarını elde etmek için kendi standartlarını icat ediyorum. Bunun dışında faydalı cevap.
Sütunun Null olmasına izin vermiyorsanız, mevcut satırları doldurmak için bir varsayılan sağlamanız gerekir. Örneğin
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
Enterprise Edition'da bu, 2012'den beri yalnızca meta veri değişikliğidir
Diğer SQL uygulamalarının da benzer kısıtlamaları vardır. Bunun nedeni, bir sütun eklemek için varsayılan değer olan bu sütun için (mantıksal olarak, fiziksel olarak olmasa bile) değerler eklemeyi gerektirmesidir NULL
. İzin vermezseniz NULL
ve bir a sahip değilseniz default
, değer ne olur?
SQL Server desteklediğinden ADD CONSTRAINT
, Pavel'in null yapılabilir bir sütun oluşturma yaklaşımını ve ardından NOT NULL
onu NULL
değer olmayanlarla doldurduktan sonra bir kısıtlama eklemesini öneririm .
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"