SQL Server 2000 / SQL Server 2005 içindeki mevcut bir tabloya varsayılan değeri olan bir sütun nasıl eklenebilir?
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
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.
İsteğe Bağlı Sınır Adı:CONSTRAINT D_SomeTable_SomeCol
dışına çıkarsanız, SQL Server otomatik olarak oluşturulur
gibi komik bir isim ile bir Varsayılan-Contraint: DF__SomeTa__SomeC__4FB7FEF6
İsteğe Bağlı Değerlerle İfade:WITH VALUES
, yalnızca Sütun Null'unuz olduğunda gereklidir.
ve Varolan Kayıtlar için kullanılan Varsayılan Değeri istersiniz.
Sütununuz NOT NULL
ise, otomatik olarak Varsayılan Değeri kullanacaktır.
Tüm Varolan Kayıtlar için, WITH VALUES
veya belirtmeseniz de.
Ekler, Varsayılan-Kısıtlama ile nasıl çalışır:SomeTable
içine bir Kayıt eklerseniz ve notSomeCol
'ın değerini belirtirseniz, 0
.
Eğer bir Kayıt eklerseniz veSomeCol
'ın NULL
değerini (ve sütununuz null değerine izin verir) belirtin,
daha sonra Default-Constraint, not kullanılacak ve NULL
, Değer olarak eklenecektir.
Notlar, aşağıdaki herkesin mükemmel geribildirimine dayanıyordu.
Özellikle ..... 'ya teşekkür:
@Yatrix, @WalterStabosz, @YahooSerious ve Yorumları için @StackMan.
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
DEFAULT'nin dahil edilmesi exist satırlarındaki sütunu varsayılan değerle doldurur;
NULL olabilecek bir sütun eklerken , WITH VALUES
, belirli DEFAULT değerinin mevcut satırlara uygulanmasını sağlar:
ALTER TABLE table
ADD column BIT -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
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
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
Eklemekte olduğunuz sütunun NOT NULL
kısıtlaması varsa, ancak DEFAULT
kısıtlaması (değeri) olmadığında dikkat edin. Tabloda herhangi bir satır varsa, ALTER TABLE
ifadesi başarısız olur. Çözüm, ya yeni koddaki NOT NULL
sınırlamasını kaldırmak ya da bunun için DEFAULT
sınırlamasını sağlamaktır.
Sadece iki satırlı en temel versiyon
ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
Kullanın:
-- Add a column with a default DateTime
-- to capture when each record is added.
ALTER TABLE myTableName
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())
GO
Birden fazla sütun eklemek istiyorsanız, bunu şu şekilde yapabilirsiniz:
ALTER TABLE YourTable
ADD Column1 INT NOT NULL DEFAULT 0,
Column2 INT NOT NULL DEFAULT 1,
Column3 VARCHAR(50) DEFAULT 'Hello'
GO
SQL Server 2008-R2'de, tasarım moduna gidiyorum - bir test veritabanında - ve tasarımcıyı kullanarak iki sütunumu ekledim ve ayarları GUI ile ve sonra rezil olarak yaptım Right-Click " Değişiklik Komut Dosyası Oluştur " seçeneğini verir!
Bang up, tahmin edilebileceği gibi işe yaraması garantili bir değişiklik senaryosuyla küçük bir pencere açar. Kolay düğmeye bas.
Kullanın:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
Referans: ALTER TABLE (Transact-SQL) (MSDN)
T-SQL ile aşağıdaki gibi yapabilirsiniz.
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
Ayrıca SQL Server Management Studio'yu da kullanabilirsiniz.
Ayrıca, aynı sütunu (yoksa) veritabanındaki tüm tablolara eklemek istiyorsanız, aşağıdakileri kullanın:
USE AdventureWorks;
EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;
Alternatif olarak, kısıtlamayı açıkça adlandırmak zorunda kalmadan bir varsayılan ekleyebilirsiniz:
ALTER TABLE [schema].[tablename] ADD DEFAULT ((0)) FOR [columnname]
Bu kısıtlamayı oluştururken mevcut varsayılan kısıtlamalarla ilgili bir sorununuz varsa, bunlar şu şekilde kaldırılabilir:
alter table [schema].[tablename] drop constraint [constraintname]
Var olan bir veritabanı tablosuna varsayılan değeri olan bir sütun eklemek için şunları kullanabiliriz:
ALTER TABLE [dbo.table_name]
ADD [Column_Name] BIT NOT NULL
Default ( 0 )
Varsayılan bir değere sahip mevcut bir veritabanı tablosuna bir sütun eklemenin başka bir yolu.
Varsayılan bir değere sahip bir sütun eklemek için çok daha kapsamlı bir SQL betiği, sütunun eklenmeden önce var olup olmadığını kontrol etmeyi de içerir; kısıtlamayı da kontrol eder ve varsa bir tane bırakarak bırakma. Bu komut aynı zamanda kısıtlamayı isimlendirir, böylece Nice adlandırma kuralına sahip olabiliriz (DF_'yi severim) ve SQL değilse, bize rasgele oluşturulmuş bir sayıya sahip bir adla kısıtlama getirecektir; bu yüzden kısıtlamayı da adlandırabilmek güzel.
-------------------------------------------------------------------------
-- Drop COLUMN
-- Name of Column: Column_EmployeeName
-- Name of Table: table_Emplyee
--------------------------------------------------------------------------
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_Emplyee'
AND COLUMN_NAME = 'Column_EmployeeName'
)
BEGIN
IF EXISTS ( SELECT 1
FROM sys.default_constraints
WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]')
AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]')
)
BEGIN
------ DROP Contraint
ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]
PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped'
END
-- ----- DROP Column -----------------------------------------------------------------
ALTER TABLE [dbo].table_Emplyee
DROP COLUMN Column_EmployeeName
PRINT 'Column Column_EmployeeName in images table was dropped'
END
--------------------------------------------------------------------------
-- ADD COLUMN Column_EmployeeName IN table_Emplyee table
--------------------------------------------------------------------------
IF NOT EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_Emplyee'
AND COLUMN_NAME = 'Column_EmployeeName'
)
BEGIN
----- ADD Column & Contraint
ALTER TABLE dbo.table_Emplyee
ADD Column_EmployeeName BIT NOT NULL
CONSTRAINT [DF_table_Emplyee_Column_EmployeeName] DEFAULT (0)
PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added'
PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added'
END
GO
Bunlar, varsayılan bir değere sahip mevcut bir veritabanı tablosuna bir sütun eklemenin iki yoludur.
ALTER TABLE ADD ColumnName {Column_Type} Constraint
ALTER TABLE (Transact-SQL) adlı MSDN makalesinde tüm alter tablo sözdizimi bulunmaktadır.
Bu, SSMS GUI'de de yapılabilir. Aşağıda varsayılan bir tarih gösteriyorum, ancak varsayılan değer ne olursa olsun elbette olabilir.
(getdate())
veya abc
veya 0
veya Varsayılan Değer veya Ciltleme alanına istediğiniz değeri girin:Örnek:
ALTER TABLE [Employees] ADD Seniority int not null default 0 GO
Örnek:
ALTER TABLE tes
ADD ssd NUMBER DEFAULT '0';
SQL Server + Tablo Alter + Sütun Ekle + Varsayılan Değer uniqueidentifier
ALTER TABLE Product
ADD ReferenceID uniqueidentifier not null
default (cast(cast(0 as binary) as uniqueidentifier))
Bunu dene
ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
IF NOT EXISTS (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME'
)
BEGIN
ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default
END
Bunun çok fazla cevabı var, ancak bu genişletilmiş metodu eklememe ihtiyaç duyuyorum. Bu çok daha uzun görünüyor, ancak aktif bir veritabanında milyonlarca satır bulunan bir tabloya NOT NULL alan ekliyorsanız son derece kullanışlıdır.
ALTER TABLE {schemaName}.{tableName}
ADD {columnName} {datatype} NULL
CONSTRAINT {constraintName} DEFAULT {DefaultValue}
UPDATE {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
ALTER TABLE {schemaName}.{tableName}
ALTER COLUMN {columnName} {datatype} NOT NULL
Bunun yapacağı şey, sütunu boş bir alan olarak ve varsayılan değerde eklemek, tüm alanları varsayılan değere güncellemek (ya da daha anlamlı değerler atayabilirsiniz) ve son olarak sütunu NOT NULL olacak şekilde değiştirecektir.
Bunun nedeni, büyük ölçekli bir tabloyu güncellerseniz ve boş olmayan yeni bir alan eklerseniz, her bir satıra yazması gerekir ve bu şekilde tüm tabloyu sütunu ekledikçe kilitler ve ardından tüm değerleri yazar.
Bu yöntem kendi başına çok daha hızlı çalışan null sütununu ekler, daha sonra boş olmayan durumu ayarlamadan önce verileri doldurur.
Her şeyi tek bir açıklamada yapmanın daha aktif tablolarımızdan birini 4-8 dakika boyunca kilitleyeceğini ve genellikle de işlemi öldürdüğümü öğrendim. Bu yöntem, her parça genellikle sadece birkaç saniye sürer ve minimum kilitlemeye neden olur.
Ek olarak, milyarlarca satırlık bir masaya sahipseniz, güncellemenin şu şekilde yapılması faydalı olabilir:
WHILE 1=1
BEGIN
UPDATE TOP (1000000) {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
IF @@ROWCOUNT < 1000000
BREAK;
END
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
Bir tabloya yeni bir sütun ekleyin:
ALTER TABLE [table]
ADD Column1 Datatype
Örneğin,
ALTER TABLE [test]
ADD ID Int
Kullanıcı bunu otomatik olarak arttırmak istiyorsa:
ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
Bu, aşağıdaki kod ile yapılabilir.
CREATE TABLE TestTable
(FirstCol INT NOT NULL)
GO
------------------------------
-- Option 1
------------------------------
-- Adding New Column
ALTER TABLE TestTable
ADD SecondCol INT
GO
-- Updating it with Default
UPDATE TestTable
SET SecondCol = 0
GO
-- Alter
ALTER TABLE TestTable
ALTER COLUMN SecondCol INT NOT NULL
GO
Şimdi önceki cevabımda bazı değişiklikler var. Cevapların hiçbirinin IF NOT EXISTS
'dan bahsetmediğini fark ettim. Bu yüzden masayı değiştirirken bazı problemlerle karşılaştığım için yeni bir çözüm sunacağım.
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO
Burada TaskSheet
, belirli bir tablo adıdır ve IsBilledToClient
, ekleyeceğiniz yeni sütundur ve varsayılan değeri 1
şeklindedir. Bu, yeni sütunda, mevcut satırların değerinin ne olacağı, dolayısıyla otomatik olarak oraya otomatik olarak ayarlanacağı anlamına gelir. Bununla birlikte, BIT
kullandığım gibi sütun türüne göre istediğiniz gibi değiştirebilirsiniz, bu yüzden varsayılan 1 değerini koydum.
Yukarıdaki sistemi öneriyorum, çünkü bir sorunla karşılaştım. Peki sorun ne? Sorun, eğer IsBilledToClient
sütunu tablo tablosunda mevcutsa, o zaman aşağıda verilen kodun sadece bir kısmını çalıştırırsanız, SQL server Query oluşturucusunda bir hata göreceksiniz. Ancak, eğer mevcut değilse, ilk defa yürütülürken hata olmaz.
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)
Bu sorgudan varsayılan değeri 0 olan bir veri türü tamsayı sütunu ekleyebilirsiniz.
Varsayılan değer Null ise:
New Column
Select Type
ve Null değerlerine izin ver onay kutusunu işaretleyin.Save
Bitti!
Bu sorguyu kullanabilirsiniz:
ALTER TABLE tableName ADD ColumnName datatype DEFAULT DefaultValue;
SQL Server + Tablo Alter + Sütun Ekle + Varsayılan Değer uniqueidentifier ...
ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
Tabloya sağ tıklayın, son sütun adının altına tıklayın ve sütun bilgisini girin.
Ardından, dize için '1' veya int için 1 gibi bir varsayılan değer veya ciltleme ekleyin.
Bu SQL Server içindir:
ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES
Örnek:
ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES
Kısıtlamalar eklemek istiyorsanız, o zaman:
ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
aşama 1. İLK SİZE ALAN EKLE TABLOSU DEĞİŞTİRMEK
alter table table_name add field field_name data_type
adım-2 BAŞVURU OLUŞTURMA
USE data_base_name;
GO
CREATE DEFAULT default_name AS 'default_value';
adim-3 BU PROSEDÜRÜ YÜRÜTMEK GEREKENLER
exec sp_bindefault 'default_name' , 'schema_name.table_name.field_name'
örnek -
USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
--Adding New Column with Default Value
ALTER TABLE TABLENAME
ADD COLUMNNAME DATATYPE NULL|NOT NULL DEFAULT (DEFAULT_VALUE)
OR
--Adding CONSTRAINT And Set Default Value on Column
ALTER TABLE TABLENAME ADD CONSTRAINT [CONSTRAINT_Name] DEFAULT
(DEFAULT_VALUE) FOR [COLUMNNAME]
ALTER TABLE Table1 ADD Col3 INT NOT NULL DEFAULT(0)
Aşağıdaki sorguyla deneyin:
ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue
Bu tabloya yeni bir sütun ekleyecektir.