SQL Server의 기존 테이블에 기본값이 포함된 열 추가
-
01-07-2019 - |
문제
기본값이 있는 열을 기존 테이블에 어떻게 추가할 수 있습니까? 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) 모든 변경 테이블 구문이 있습니다.
예:
ALTER TABLE [Employees] ADD Seniority int not null default 0 GO
예:
ALTER TABLE tes
ADD ssd NUMBER DEFAULT '0';
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