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




sql server란 (20)

SQL Server 2000 / SQL Server 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_SomeColCONSTRAINT D_SomeTable_SomeCol 하면 SQL Server가 자동 생성합니다.
재미있는 이름을 가진 Default-Contraint : DF__SomeTa__SomeC__4FB7FEF6

선택적 값 포함 문 :
WITH VALUES 는 열이 Nullable 일 때만 필요합니다.
기존 레코드에 사용되는 기본값을 원합니다.
열이 NOT NULLNOT NULL 경우 자동으로 기본값을 사용합니다
모든 기존 레코드에 대해 WITH VALUES 를 지정하는지 여부.

삽입이 기본 제약 조건과 함께 작동하는 방법 :
SomeTable 레코드를 삽입하고 SomeCol 의 값을 지정하지 않으면 기본값으로 0 됩니다.
레코드를 삽입하고 SomeCol 의 값을 NULL 로 지정 NULL (그리고 컬럼이 널을 허용하는 경우),
Default-Constraint는 사용 되지 않고 NULL 이 값으로 삽입됩니다.

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


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

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

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

당신이 짐작하자면, 적절히 형식화 된 보장 된 근무지 변경 스크립트를 사용하여 약간의 창을 띄웁니다. 쉬운 버튼을 누르십시오.


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

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 는 삽입 할 새 열이고 IsBilledToClient1 입니다. 즉, 새 열에서 기존 행의 값이 무엇인지를 의미하므로 하나가 자동으로 설정됩니다. 그러나 BIT 사용한 것처럼 원하는대로 열 유형을 변경할 수 있으므로 기본값 1을 넣습니다.

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

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

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

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

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


다음과 같은 방법으로 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();''' ;

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

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

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

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

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

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

예:

ALTER TABLE tes 
ADD ssd  NUMBER   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 Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO

이것은 SSMS GUI에서도 가능합니다. 아래에 기본 날짜를 표시하지만 기본값은 무엇이든 될 수 있습니다.

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


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

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

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


Nullable 열을 추가 할 때 WITH VALUES 는 특정 DEFAULT 값이 기존 행에 적용되는지 확인합니다.

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES

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

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

한 열 추가 :

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

SELECT * 
FROM STUDENT

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


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 ADD ColumnName {Column_Type} Constraint

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


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

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


ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

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





sql-server-2000