programing

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

codeshow 2023. 4. 7. 21:45
반응형

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

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_SomeColSQL Server の sql sql sql sql sql 。
: "Default-Constraint: "같은 의 Default-Constraint: "Default-Constraint:DF__SomeTa__SomeC__4FB7FEF6

「 」 、 「 」:
WITH VALUES이 Nullable인 합니다.
[기존 레코드(Existing Records)] [기본값(Default Value)]을 클릭합니다.
컬럼이 다음과 같은 경우NOT NULL으로 [ Value](기본값)가 사용됩니다.
Records에 " "를 WITH VALUES그렇지 않으면.

Default-Constraint는 다음과 같습니다.
[ ](를 .SomeTable 지정하지 않음SomeCol디폴트로 있습니다.0.
[ Record ]를 삽입하고 [Specify]를 지정하는 경우SomeCol의 「」)NULL은 null을 (null은 null입니다),
Default-Constraint는 사용되지 않습니다.NULL값으로 삽입됩니다.

메모는 아래 모든 사람의 좋은 피드백을 바탕으로 작성되었습니다.
다음 중 하나:
@Yatrix, @WalterStabosz, @YahooSerious @StackMan @StackMan stack @ @ @ 。

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

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

nullable 열을 추가할 때WITH VALUES행에 되는 것을 합니다.「 DEFAULT 」 、 「 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'

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

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

추가할 열에 다음 항목이 있는 경우 주의하십시오.NOT NULLa const const const 、 const const const const const const 。DEFAULT★★★★★ALTER TABLE이 경우 테이블에 행이 있으면 문이 실패합니다. the the the the the 、 the 、 the 、 the 。NOT NULL열에서 새 열을 제공하십시오.DEFAULT약이있있 있있있다다

용도:

-- 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 [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 {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 Management Studio를 사용할 수 있을 뿐만 아니라 설계 메뉴에서 테이블을 마우스 오른쪽 버튼으로 클릭하고 기본값을 table로 설정합니다.

또한 데이터베이스의 모든 테이블에 동일한 열(없는 경우)을 추가하려면 다음을 사용합니다.

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

SQL Server 2008-R2에서는 테스트 데이터베이스에서 설계 모드로 이동하여 설계자를 사용하여 두 개의 열을 추가하고 GUI를 사용하여 설정을 하면 "변경 스크립트 생성" 옵션이 나타납니다.

BANG UP은 올바르게 포맷된 작업 보증 변경 스크립트가 있는 작은 창을 띄웁니다.쉬운 버튼을 누르세요.

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

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

이 제약조건을 작성할 때 기존 기본 제약조건에 문제가 있는 경우 다음과 같이 제거할 수 있습니다.

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

이것은 SSMS GUI에서도 실행할 수 있습니다.아래 디폴트 날짜를 표시하지만 디폴트 값은 임의입니다.

  1. 테이블을 디자인 뷰에 배치합니다(오브젝트 탐색기 테이블 오른쪽 클릭-> 디자인).
  2. 테이블에 열을 추가합니다(또는 업데이트할 열이 이미 있는 경우 클릭).
  3. 열 에 '열 속성'을 합니다.(getdate()) ★★★★★★★★★★★★★★★★★」'abc' ★★★★★★★★★★★★★★★★★」0또는 다음 그림과 같이 [Default Value]또는 [Binding]필드에서 원하는 값을 지정합니다.

여기에 이미지 설명 입력

ALTER TABLE ADD ColumnName {Column_Type} Constraint

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

예:

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)

여기에 1개의 열을 추가합니다.

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

SELECT * 
FROM STUDENT

테이블이 생성되고 열이 기본값으로 기존 테이블에 추가됩니다.

이미지 1

이것은 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

이것은 많은 해답을 가지고 있지만, 나는 이 확장 방법을 추가할 필요성을 느낀다.이 작업은 훨씬 길어 보이지만 활성 데이터베이스에 수백만 개의 행이 있는 테이블에 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

이렇게 하면 열을 늘 가능한 필드로 추가하고 기본값을 사용하여 모든 필드를 기본값으로 업데이트합니다(또는 더 의미 있는 값을 할당할 수 있음). 마지막으로 열이 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 Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO

SQL Server + Alter Table + Add Column + Default 고유 식별자

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier))
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
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

테이블에 새 열 추가:

ALTER TABLE [table]
ADD Column1 Datatype

예를들면,

ALTER TABLE [test]
ADD ID Int

사용자가 자동으로 증가시키려면 다음과 같이 하십시오.

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

다음 쿼리를 사용하여 시도합니다.

ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue

테이블에 새 열이 추가됩니다.

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

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

이 문제에 대처하는 방법은 2가지가 있습니다.둘 다 기본값을 추가하지만 여기서 문제 설명에는 전혀 다른 의미가 추가됩니다.

샘플 데이터 생성부터 시작하겠습니다.

샘플 데이터 생성

CREATE TABLE ExistingTable (ID INT)
GO
INSERT INTO ExistingTable (ID)
VALUES (1), (2), (3)
GO
SELECT *
FROM ExistingTable

여기에 이미지 설명 입력

1. 향후 삽입을 위해 기본값으로 열 추가

ALTER TABLE ExistingTable
ADD ColWithDefault VARCHAR(10) DEFAULT 'Hi'
GO

여기에 이미지 설명 입력

새 레코드를 삽입할 때 기본 열을 추가했으므로 기본 값은 다음과 같습니다.'Hi'값이 지정되지 않은 경우

INSERT INTO ExistingTable(ID)
VALUES (4)
GO
Select * from ExistingTable
GO

여기에 이미지 설명 입력

이것은 디폴트값을 가지는 문제에 대처하고 있습니다만, 여기에 문제의 함정이 있습니다.향후 삽입뿐만 아니라 모든 컬럼에 기본값을 설정할 경우에는 어떻게 해야 합니까?여기에는 방법 2가 있습니다.

2. 모든 삽입에 대해 기본값으로 열 추가

ALTER TABLE ExistingTable
ADD DefaultColWithVal VARCHAR(10) DEFAULT 'DefaultAll'
WITH VALUES
GO
Select * from ExistingTable
GO

여기에 이미지 설명 입력

다음 스크립트는 가능한 모든 시나리오에서 기본값을 사용하여 새 열을 추가합니다.

그것이 질문에 가치를 더하기를 바랍니다.감사해요.

자, 이제 이전 답변에 대한 수정 사항이 있습니다.이 질문에 대한 답변이 하나도 없다는 것을 알 수 없었습니다.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에서는 기존 행의 자동으로설정됩니다. 제가 사용한 수 있습니다.BIT1번지

저는 문제에 직면했기 때문에 위의 제도를 제안합니다.럼럼뭐 ?가 제? ???는 ''의 IsBilledToClient이치노SQL Server Query Builder의 SQL Server Query Builder는 SQL Server Query Builder 。그러나 이것이 존재하지 않는 경우 실행 시 오류가 발생하지 않습니다.

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

언급URL : https://stackoverflow.com/questions/92082/add-a-column-with-a-default-value-to-an-existing-table-in-sql-server

반응형