it-swarm-tr.com

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

SQL Server 2000 / SQL Server 2005 içindeki mevcut bir tabloya varsayılan değeri olan bir sütun nasıl eklenebilir?

2439
Mathias

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ı 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.

3111
James Boother
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; 

903
dbugger

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
207
phunk_munkie
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
122
ddc0660
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
111
Evan V

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.

89
jalbert

Sadece iki satırlı en temel versiyon

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
86
adeel41

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 
69
JerryOL

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
62
Gabriel L.

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.

48
Jack

Kullanın:

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

Referans: ALTER TABLE (Transact-SQL) (MSDN)

46
giá vàng

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();''' ;
43
gngolakia

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]
41
Christo

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.

40
Catto
ALTER TABLE ADD ColumnName {Column_Type} Constraint

ALTER TABLE (Transact-SQL) adlı MSDN makalesinde tüm alter tablo sözdizimi bulunmaktadır.

34
Benjamin Autin

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.

  1. Tablonuzu tasarım görünümüne yerleştirin (Objeye sağ tıklayın) Explorer-> Tasarım)
  2. Tabloya bir sütun ekleyin (veya eğer varsa, güncellemek istediğiniz sütunu tıklayın.
  3. Aşağıdaki Sütun Özellikleri'ne, aşağıdaki resimde gösterildiği gibi (getdate()) veya abc veya 0 veya Varsayılan Değer veya Ciltleme alanına istediğiniz değeri girin:

 enter image description here

29
Tony L.

Örnek:

ALTER TABLE [Employees] ADD Seniority int not null default 0 GO
27
andy

Örnek:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';
21
Mohit Tamrakar

İlk önce name student ile bir tablo oluşturun:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

Buna bir sütun ekle:

ALTER TABLE STUDENT 
ADD STUDENT_NAME INT NOT NULL DEFAULT(0)

SELECT * 
FROM STUDENT

Tablo oluşturulur ve varolan bir tabloya varsayılan değeri olan bir sütun eklenir.

 Image 1

17
Laxmi

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))
16
Naveen Desosha

Bunu dene

ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
15
Jakir Hossain
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
14
Jeevan Gharti

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
13
Ste Bov
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
12
wild coder

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
10
Chirag Thakar

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
9
Mohit Dagar

Ş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]
8
gdmanandamohon
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.

8
Sandeep Kumar

Varsayılan değer Null ise:

  1. SQL Server'da, hedeflenen tablonun ağacını açın.
  2. "Sütunlar" ı sağ tıklayın ==> New Column
  3. Sütun Adı, Select Type ve Null değerlerine izin ver onay kutusunu işaretleyin.
  4. Menü çubuğundan Save

Bitti!

7
usefulBee

Bu sorguyu kullanabilirsiniz:

ALTER TABLE tableName ADD ColumnName datatype DEFAULT DefaultValue;
6
Arun D

SQL Server + Tablo Alter + Sütun Ekle + Varsayılan Değer uniqueidentifier ...

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
6
Chanukya

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.

5

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
4
Akhil Singh

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';
4
raju chowrsiya
--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]
3
Erfan Mohammadi
ALTER TABLE Table1 ADD Col3 INT NOT NULL DEFAULT(0)
3

Aşağıdaki sorguyla deneyin:

ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue

Bu tabloya yeni bir sütun ekleyecektir.

1
Anshul Dubey