etc./StackOverFlow

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

청렴결백한 만능 재주꾼 2021. 10. 26. 04:49
반응형

질문자 :Mathias


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_SomeCol 을 생략하면 SQL Server가 자동 생성됩니다.
DF__SomeTa__SomeC__4FB7FEF6과 같은 재미있는 이름을 가진 기본 DF__SomeTa__SomeC__4FB7FEF6

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

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

메모는 아래 모두의 훌륭한 피드백을 기반으로 했습니다.
특별히 감사함:
@Yatrix, @WalterStabosz, @YahooSerious 및 @StackMan이 의견을 주었습니다.


James Boother

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

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


dbugger

nullable 열을 추가할 때 WITH VALUES 는 특정 DEFAULT 값이 기존 행에 적용되도록 합니다.

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

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

ddc0660

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

Evan V

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

 ALTER TABLE MyTable ADD MyNewColumn INT NOT NULL DEFAULT 0

adeel41

추가하려는 열에 NOT NULL 제약 조건이 있지만 DEFAULT 제약 조건(값)이 없는 경우 주의하십시오. 테이블에 행이 있는 경우 ALTER TABLE 해결책은 새 열에서 NOT NULL DEFAULT 제약 조건을 제공하는 것입니다.


jalbert

사용하다:

 -- Add a column with a default DateTime -- to capture when each record is added. ALTER TABLE myTableName ADD RecordAddedDate SMALLDATETIME NULL DEFAULT (GETDATE()) GO

JerryOL

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

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

Gabriel L.

사용하다:

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

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


giá vàng

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

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

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

열을 추가하기 전에 열이 있는지 확인하고 제약 조건이 있으면 삭제하는 것을 포함하여 기본값으로 열을 추가하는 훨씬 더 철저한 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

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


Catto

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

gngolakia

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

Bang up은 적절한 형식의 작업 보장 변경 스크립트와 함께 작은 창을 표시합니다. 쉬운 버튼을 누르십시오.


Jack

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

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

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

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

Christo

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

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

여기에 이미지 설명 입력


Tony L.

ALTER TABLE ADD ColumnName {Column_Type} Constraint

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


Benjamin Autin

예시:

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

andy

예시:

 ALTER TABLE tes ADD ssd NUMBER DEFAULT '0';

Mohit Tamrakar

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

 CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

여기에 하나의 열을 추가하십시오.

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

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

이미지 1


Laxmi

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

이렇게 하면 열을 nullable 필드로 추가하고 기본값을 사용하여 모든 필드를 기본값으로 업데이트하고(또는 더 의미 있는 값을 할당할 수 있음) 마지막으로 열을 NOT NULL로 변경합니다.

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

이 방법은 자체적으로 훨씬 빠르게 작동하는 nullable 열을 추가한 다음 not null 상태를 설정하기 전에 데이터를 채웁니다.

하나의 명령문에서 모든 작업을 수행하면 4-8분 동안 활성 테이블 중 하나가 잠기는 것을 발견했으며 꽤 자주 프로세스를 종료했습니다. 이 방법은 각 부분에 일반적으로 몇 초 밖에 걸리지 않으며 최소한의 잠금이 발생합니다.

또한 수십억 개의 행 영역에 테이블이 있는 경우 다음과 같이 업데이트를 일괄 처리할 가치가 있습니다.

 WHILE 1=1 BEGIN UPDATE TOP (1000000) {schemaName}.{tableName} SET {columnName} = {DefaultValue} WHERE {columName} IS NULL IF @@ROWCOUNT < 1000000 BREAK; END

Ste Bov

이 시도

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

Jakir Hossain

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

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

Naveen Desosha

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

Jeevan Gharti

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

wild coder

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

Akhil Singh

테이블에 새 열 추가:

 ALTER TABLE [table] ADD Column1 Datatype

예를 들어,

 ALTER TABLE [test] ADD ID Int

사용자가 자동 증가되도록 하려면 다음을 수행하십시오.

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

Chiragkumar 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

Mohit Dagar

아래 쿼리로 시도하십시오.

 ALTER TABLE MyTable ADD MyNewColumn DataType DEFAULT DefaultValue

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


Anshul Dubey

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

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


Sandeep Kumar

글쎄, 이제 이전 답변에 약간의 수정이 있습니다. 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]

gdmanandamohon

출처 : http:www.stackoverflow.com/questions/92082/add-a-column-with-a-default-value-to-an-existing-table-in-sql-server

반응형