web-dev-qa-ko.com

SQL Server의 기존 테이블에 기본값이있는 열 추가

SQL Server 2000 / SQL Server 2005 의 기존 테이블에 기본 값이있는 열을 추가하는 방법은 무엇입니까?

2439
Mathias

통사론:

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.

노트:

제약 조건 이름 :
CONSTRAINT D_SomeTable_SomeCol를 생략하면 SQL Server가 자동 생성합니다.
재미있는 이름을 가진 Default-Contraint는 다음과 같습니다 : DF__SomeTa__SomeC__4FB7FEF6

선택적 값 사용 문 :
WITH VALUES는 열이 Nullable 일 때만 필요합니다.
그리고 기존 레코드에 사용 된 기본값을 원합니다.
열이 NOT NULL이면 자동으로 기본값을 사용합니다
WITH VALUES를 지정했는지 여부에 상관없이 모든 기존 레코드에 대한 .

인서트가 기본 제약 조건과 함께 작동하는 방식 :
SomeTable에 레코드를 삽입하고notSomeCol의 값을 지정하면 Default로 0가됩니다.
RecordandSpecify SomeCol의 값을 NULL로 입력하면 (그리고 열에는 null이 허용됩니다.)
그런 다음 Default-Constraint가not사용되며 NULL이 값으로 삽입됩니다.

메모는 아래의 모든 사람들의 위대한 의견에 기반했습니다.
특별히 감사함:
@Yatrix, @WalterStabosz, @YahooSerious 및 @StackMan에 대한 의견.

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

DEFAULT를 포함하면 existing rows의 열이 기본값으로 채워 지므로 NOT NULL 제약 조건을 위반하지 않습니다. 

903
dbugger

nullable 열 를 추가하면 WITH VALUES는 특정 DEFAULT 값이 기존 행에 적용되는지 확인합니다.

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

추가 할 열에 NOT NULL 제약 조건이 있지만 아직 DEFAULT 제약 조건 (값)이없는 경우주의하십시오. 이 경우 테이블에 행이 있으면 ALTER TABLE 문이 실패합니다. 해결 방법은 새 열에서 NOT NULL 제약 조건을 제거하거나 DEFAULT 제약 조건을 제공하는 것입니다.

89
jalbert

두 줄만있는 가장 기본적인 버전

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

용도:

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

여러 열을 추가하려는 경우 다음과 같이이 방법을 사용할 수 있습니다.

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에서는 테스트 데이터베이스에서 디자인 모드로 이동하고 디자이너를 사용하여 두 열을 추가하고 GUI로 설정 한 다음 악명 높은 Right-Click " 변경 스크립트 생성 "!

당신이 짐작할 수 있듯이, 적절히 형식화 된 보증 된 근무지 변경 스크립트를 사용하면 약간의 창이 튀어 나옵니다. 쉬운 버튼을 누르십시오.

48
Jack

용도:

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

참조 : ALTER TABLE (Transact-SQL) (MSDN)

46
giá vàng

다음과 같은 방법으로 T-SQL을 사용하여 작업을 수행 할 수 있습니다.

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

뿐만 아니라 SQL Server Management Studio 를 사용할 수도 있습니다. 또한 디자인 메뉴에서 테이블을 마우스 오른쪽 단추로 클릭하고 테이블에 기본값을 설정합니다.

또한 데이터베이스에있는 모든 테이블에 동일한 열 (존재하지 않는 경우)을 추가하려면 다음을 사용하십시오.

 USE AdventureWorks;
 EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;
43
gngolakia

또는 명시 적으로 제약 조건의 이름을 지정하지 않고도 기본값을 추가 할 수 있습니다.

ALTER TABLE [schema].[tablename] ADD  DEFAULT ((0)) FOR [columnname]

이 제약 조건을 생성 할 때 기존 기본 제약 조건에 문제가있는 경우 다음을 수행하여 제거 할 수 있습니다.

alter table [schema].[tablename] drop constraint [constraintname]
41
Christo

기존 데이터베이스 테이블에 기본값을 사용하여 열을 추가하려면 다음을 사용할 수 있습니다.

ALTER TABLE [dbo.table_name]
    ADD [Column_Name] BIT NOT NULL
Default ( 0 )

다음은 기본값을 사용하여 기존 데이터베이스 테이블에 열을 추가하는 또 다른 방법입니다.

기본값을 가진 열을 추가하는 훨씬 더 철저한 SQL 스크립트는 열을 추가하기 전에 열이 있는지 확인하는 것을 포함하여 아래에 있습니다. 또한 열이 있으면 조건을 확인하고 삭제합니다. 이 스크립트는 제약 조건의 이름을 지정하여 멋진 명명 규칙 (DF_를 좋아한다)을 가질 수 있으며, SQL이 아닌 경우 무작위로 생성 된 숫자가있는 제약 조건을 SQL에 제공합니다. 그래서 제약 조건의 이름을 지을 수있어서 좋네요.

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

다음은 기본값을 사용하여 기존 데이터베이스 테이블에 열을 추가하는 두 가지 방법입니다.

40
Catto
ALTER TABLE ADD ColumnName {Column_Type} Constraint

MSDN articleALTER TABLE (Transact-SQL)에는 모든 alter table 구문이 있습니다.

34
Benjamin Autin

이 작업은 SSMS GUI에서도 수행 할 수 있습니다. 아래에 기본 날짜를 표시하지만 기본값은 무엇이든 될 수 있습니다.

  1. 디자인보기에 테이블을 놓으십시오 (객체 의 테이블을 마우스 오른쪽 버튼으로 클릭하고 탐색기 -> 디자인)
  2. 테이블에 열을 추가하십시오 (또는 이미 존재하는 인 경우 업데이트하려는 열을 클릭하십시오)
  3. 아래 열 속성에서 (getdate()) 또는 abc 또는 0 또는 원하는 값을 기본값 또는 바인딩 필드에 아래 그림과 같이 입력하십시오.

 enter image description here

29
Tony L.

예:

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

예:

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

먼저 student라는 이름의 테이블을 만듭니다 :

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

하나의 열을 추가합니다 :

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

SELECT * 
FROM STUDENT

테이블이 만들어지고 기본값이있는 기존 테이블에 열이 추가됩니다.

 Image 1

17
Laxmi

SQL Server + 테이블 변경 + 열 추가 + 기본값 uniqueidentifier 

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier))
16
Naveen Desosha

이 시도

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

이것은 많은 답변을 가지고 있지만,이 확장 된 메소드를 추가 할 필요가 있다고 느낍니다. 이것은 훨씬 더 길어 보이지만 활성 데이터베이스에 수백만 개의 행이있는 테이블에 NOT NULL 필드를 추가하는 경우 매우 유용합니다.

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

이 작업을 수행하려면 null 허용 필드로 열을 추가하고 기본값을 사용하여 모든 필드를 기본값으로 업데이트하거나 더 의미있는 값을 할당 할 수 있습니다. 마지막으로 열을 NOT NULL로 변경합니다.

그 이유는 대규모 테이블을 업데이트하고 모든 단일 행에 쓰는 새로운 null이 아닌 필드를 추가하기 때문에 열을 추가 할 때 전체 테이블을 잠그고 모든 값을 쓸 것이기 때문입니다.

이 메소드는 자체적으로 훨씬 빠르게 작동하는 널 (NULL) 입력 가능 컬럼을 추가 한 후, 널 (null)이 아닌 상태로 설정하기 전에 데이터를 채 웁니다.

한 문장으로 전체 작업을 수행하면 4-8 분 동안 더 많은 활성 테이블 중 하나가 잠기고 꽤 자주 프로세스가 종료된다는 것을 알았습니다. 이 방법은 일반적으로 몇 초 밖에 걸리지 않으며 잠금을 최소화합니다.

또한 수십억 개의 행 영역에 테이블이있는 경우 다음과 같이 업데이트를 배치하는 것이 좋습니다.

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

테이블에 새 열을 추가하십시오.

ALTER TABLE [table]
ADD Column1 Datatype

예를 들어,

ALTER TABLE [test]
ADD ID Int

사용자가 자동으로 증가 시키려면 다음을 수행하십시오.

ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
10
Chirag Thakar

이것은 아래 코드로 수행 할 수 있습니다.

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

글쎄, 이제 나는 나의 이전 대답을 약간 수정했다. 나는 아무 대답도 IF NOT EXISTS 언급 한 것을주의했다. 그래서 나는 테이블을 변경하는 데 몇 가지 문제를 겪었으므로 새로운 솔루션을 제공 할 것입니다.

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

여기서 TaskSheet은 특정 테이블 이름이고 IsBilledToClient은 삽입 할 새 열이며 기본값은 1입니다. 즉, 새 열에서 기존 행의 값이 무엇인지를 의미하므로 하나가 자동으로 설정됩니다. 그러나 BIT을 사용하는 것과 같이 원하는대로 열 유형을 변경할 수 있으므로 기본값 1을 넣습니다.

나는 위의 체계를 제안한다. 왜냐하면 나는 문제에 직면했기 때문이다. 문제가 무엇입니까? 문제는 테이블 테이블에 IsBilledToClient 열이있는 경우 아래 제공된 코드 부분 만 실행하면 SQL 서버 쿼리 빌더에 오류가 표시된다는 것입니다. 하지만 처음으로 존재하지 않으면 실행시 오류가 발생하지 않습니다.

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)

이 쿼리에서 기본값 0의 데이터 유형 integer 열을 추가 할 수 있습니다.

8
Sandeep Kumar

기본값이 Null이면 다음을 수행합니다.

  1. SQL Server에서 대상 테이블의 트리를 엽니 다.
  2. "Columns"를 마우스 오른쪽 버튼으로 클릭 ==> New Column
  3. Name, Select Type 열을 입력하고 Null 허용 확인란을 선택하십시오.
  4. 메뉴 바에서 Save을 클릭하십시오.

끝난!

7
usefulBee

다음 쿼리를 사용할 수 있습니다.

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

SQL Server + 테이블 변경 + 열 추가 + 기본값 uniqueidentifier ...

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

테이블을 마우스 오른쪽 단추로 클릭하고 마지막 열 이름 아래를 클릭 한 다음 열 정보를 입력하십시오.

그런 다음 문자열에 '1', int에 1과 같은 기본값이나 바인딩을 추가하십시오.

5

이것은 SQL Server 용입니다.

ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES

예:

ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES

제약 조건을 추가하려면 다음을 수행하십시오.

ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
4
Akhil Singh

1 단계. 먼저 필드를 추가하여 테이블을 변경해야합니다.

alter table table_name add field field_name data_type

step-2 DEFAULT 생성

USE data_base_name;
GO
CREATE DEFAULT default_name AS 'default_value';

3 단계 당신은이 과정을 실행해야합니다.

exec sp_bindefault 'default_name' , 'schema_name.table_name.field_name'

예 - 

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

아래 쿼리를 사용해보십시오.

ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue

이렇게하면 표에 새 열이 추가됩니다.

1
Anshul Dubey