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




나무위키 server란 (25)

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

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


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

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


ALTER TABLE ADD ColumnName {Column_Type} Constraint

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


이것은 많은 답변을 가지고 있지만,이 확장 된 메소드를 추가 할 필요가 있다고 느낍니다. 이것은 훨씬 더 길어 보이지만 활성 데이터베이스에서 수백만 개의 행이있는 테이블에 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로 변경합니다.

그 이유는 대규모 테이블을 갱신하고 모든 단일 행에 기록해야하는 새로운 not 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

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

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


예:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';

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

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

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

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

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

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

이 시도

ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO

통사론:

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 등이 있습니다.


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

먼저 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 {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

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


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

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

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

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

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

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

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


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

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 [Employees] ADD Seniority int not null default 0 GO

ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

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

  1. SQL Server에서 대상 테이블의 트리를 엽니 다.
  2. "Columns"를 오른쪽 클릭하십시오 ==> New Column
  3. 이름, Select Type 및 Null 허용 확인 확인란을 Select Type 하십시오.
  4. 메뉴 바에서 Save 클릭 Save

끝난!


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

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


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

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]

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

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

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'




sql sql-server sql-server-2005 sql-server-2000