문제

기본값이 있는 열을 기존 테이블에 어떻게 추가할 수 있습니까? SQL 서버 2000 / SQL 서버 2005?

도움이 되었습니까?

해결책

통사론:

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가 자동 생성됩니다.
다음과 같은 재미있는 이름을 가진 기본 제약 조건: DF__SomeTa__SomeC__4FB7FEF6

선택적 With-Values ​​문:
그만큼 WITH VALUES 열이 Nullable인 경우에만 필요합니다.
기존 레코드에 사용되는 기본값을 원합니다.
귀하의 칼럼이 NOT NULL, 그러면 자동으로 기본값을 사용합니다.
지정 여부에 관계없이 모든 기존 레코드에 대해 WITH VALUES 아니면.

삽입이 Default-Constraint와 함께 작동하는 방식:
레코드를 삽입하면 SomeTable 그리고 할 ~ 아니다 지정하다 SomeCol의 값이면 기본값은 다음과 같습니다. 0.
레코드를 삽입하면 그리고 지정하다 SomeCol의 가치는 다음과 같습니다. NULL (그리고 귀하의 열은 null을 허용합니다)
그러면 Default-Constraint는 ~ 아니다 사용되며 NULL 값으로 삽입됩니다.

메모는 아래 모든 사람의 훌륭한 피드백을 바탕으로 작성되었습니다.
특별히 감사함:
댓글을 남겨주신 @Yatrix, @WalterStabosz, @YahooSerious 및 @StackMan.

다른 팁

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

다음의 포함 기본 열을 채웁니다 기존의 행에 기본값이 있으므로 NOT NULL 제약 조건이 위반되지 않습니다.

추가할 때 널 입력 가능 열, WITH VALUES 특정 DEFAULT 값이 기존 행에 적용되는지 확인합니다.

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'

추가하려는 열에 NOT NULL 제약조건이 있지만 아직 DEFAULT 제약 조건(값).그만큼 ALTER TABLE 이 경우 테이블에 행이 있으면 문이 실패합니다.해결책은 다음 중 하나를 제거하는 것입니다. NOT NULL 새 열의 제약 조건을 적용하거나 DEFAULT 그것에 대한 제약.

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

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

사용:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 

여러 열을 추가하려면 다음과 같이 할 수 있습니다.

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO

사용:

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

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

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

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

뿐만 아니라 당신이 사용할 수 있습니다 SQL Server 관리 스튜디오 또한 디자인 메뉴에서 테이블을 마우스 오른쪽 버튼으로 클릭하고 기본값을 테이블로 설정합니다.

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

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

SQL Server 2008-R2에서는 디자인 모드(테스트 데이터베이스)로 이동하여 디자이너를 사용하여 두 개의 열을 추가하고 GUI로 설정을 지정했습니다. 마우스 오른쪽 버튼으로 클릭 "라는 옵션을 제공합니다.변경 스크립트 생성"!

Bang up은 올바른 형식의 작업 보장 변경 스크립트가 포함된 작은 창을 표시합니다.간편 버튼을 누르세요.

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

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

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

기본값이 있는 열을 추가하는 훨씬 더 철저한 SQL 스크립트는 열을 추가하기 전에 열이 존재하는지 확인하고 제약 조건을 검사하고 있는 경우 삭제하는 것을 포함하여 아래에 나와 있습니다.이 스크립트는 또한 제약 조건의 이름을 지정하여 좋은 명명 규칙을 가질 수 있도록 합니다(저는 DF_를 좋아합니다). 그렇지 않은 경우 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

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

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

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

이 제약조건을 생성할 때 기존 기본 제약조건에 문제가 있는 경우 다음 방법으로 제거할 수 있습니다.

alter table [schema].[tablename] drop constraint [constraintname]
ALTER TABLE ADD ColumnName {Column_Type} Constraint

MSDN 기사 ALTER TABLE(Transact-SQL) 모든 변경 테이블 구문이 있습니다.

SSMS GUI에서도 이 작업을 수행할 수 있습니다.아래에 기본 날짜가 나와 있지만 기본값은 무엇이든 가능합니다.

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

enter image description here

예:

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

예:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';

먼저 이름이 학생인 테이블을 만듭니다.

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

여기에 하나의 열을 추가합니다.

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

SELECT * 
FROM STUDENT

테이블이 생성되고 기본값을 사용하여 기존 테이블에 열이 추가됩니다.

Image 1

SQL Server + 테이블 변경 + 열 추가 + 기본값 고유 식별자

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier))
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

이 시도

ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO

여기에는 많은 답변이 있지만 이 확장된 방법을 추가할 필요성을 느낍니다.훨씬 길어 보이지만 활성 데이터베이스에 수백만 개의 행이 있는 테이블에 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

테이블에 새 열을 추가합니다.

ALTER TABLE [table]
ADD Column1 Datatype

예를 들어,

ALTER TABLE [test]
ADD ID Int

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

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

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

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
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

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

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

글쎄, 이제 이전 답변을 약간 수정했습니다.언급된 답변 중 어느 것도 발견되지 않았습니다. 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 Server 쿼리 빌더에 오류가 표시됩니다.그러나 존재하지 않는 경우 처음으로 실행 시 오류가 발생하지 않습니다.

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

SQL Server + 테이블 변경 + 열 추가 + 기본값 고유 식별자...

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top