SQL Server 2000 / SQL Server 2005 의 기존 테이블에 기본값을 가진 열을 추가하려면 어떻게 해야합니까?
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
옵션으로-값 문 :
는 WITH VALUES
만 열이 널 때 필요
하고 가치가 레코드를 기존에 사용되는 기본을합니다.
열이 NOT NULL
인 경우
, 지정 여부에 관계없이 모든 기존 레코드 의 기본값을 자동으로 사용합니다 WITH VALUES
.
삽입이 기본 제약 조건으로 작동하는 방법 :
레코드를 레코드에 삽입하고 값을 지정 SomeTable
하지 않으면SomeCol
기본값이로 설정됩니다 0
.
레코드 를 지정 하고SomeCol
의 값을 다음과 같이 지정 하면 NULL
(열에 널이 허용됨)
기본 제한 조건이 사용 되지 않고NULL
값으로 삽입됩니다.
메모는 아래의 모든 사람의 훌륭한 피드백을 바탕으로 작성되었습니다.
의견을 주신 @Yatrix, @WalterStabosz, @YahooSerious 및 @StackMan에게
감사드립니다
.
NOT NULL
. 이것을 시도하십시오 : create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah;
column에 대해 2 개의 NULL 값이 표시됩니다 b
.
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
DEFAULT를 포함하면 기존 행 의 열 이 기본값으로 채워 지므로 NOT NULL 제한 조건이 위반되지 않습니다.
추가하면 널 열 , WITH VALUES
특정 디폴트 값이 존재하는 행에 적용되도록한다 :
ALTER TABLE table
ADD column BIT -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
DEFAULT
제약 조건이 있는 열에 항상 값이 있다고 가정하기 쉽습니다. 즉, NOT NULL
지정되지 않은 경우 에도 NULL 이 아닙니다.
BIT
데이터 유형 에 대해 이야기하지 않고이 특정 BIT
열에 대해 이야기하고있었습니다 . 답을 보면 열이로 선언됩니다 NOT NULL
.
사용하다:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
참조 : ALTER TABLE (Transact-SQL) (MSDN)
기본값을 사용하여 기존 데이터베이스 테이블에 열을 추가하려면 다음을 사용할 수 있습니다.
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 ADD ColumnName {Column_Type} Constraint
MSDN 문서 ALTER TABLE (Transact-SQL) 에는 모든 alter table 구문이 있습니다.
예:
ALTER TABLE tes
ADD ssd NUMBER DEFAULT '0';
여기에는 많은 답변이 있지만이 확장 방법을 추가해야한다고 생각합니다. 이것은 훨씬 길어 보이지만 활성 데이터베이스에 수백만 행이있는 테이블에 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로 변경합니다.
그 이유는 대규모 테이블을 업데이트하고 널이 아닌 새 필드를 추가하면 모든 단일 행에 기록해야하므로 열을 추가 한 다음 모든 값을 쓸 때 전체 테이블을 잠 그게됩니다.
이 방법은 자체적으로 훨씬 빠르게 작동하는 nullable 열을 추가 한 다음 null이 아닌 상태를 설정하기 전에 데이터를 채 웁니다.
한 문장으로 전체 작업을 수행하면 4-8 분 동안 더 활동적인 테이블 중 하나가 잠기고 프로세스를 자주 종료했습니다. 이 방법은 일반적으로 각 부품이 몇 초만 걸리며 잠금이 최소화됩니다.
또한 수십억 행의 영역에 테이블이 있으면 업데이트를 일괄 처리하는 것이 좋습니다.
WHILE 1=1
BEGIN
UPDATE TOP (1000000) {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
IF @@ROWCOUNT < 1000000
BREAK;
END
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
NOT EXISTS
테이블을 변경하는 시도하기 전에 확인. 아주 좋은 해결책입니다. 이것이 어떻게 작동하는지에 대한 추가 논평은 더 유용 할 것입니다.
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
이것은 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
이것은 아래 코드로 수행 할 수 있습니다.
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 MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue
테이블에 새 열이 추가됩니다.
글쎄, 나는 지금 나의 이전 답변에 약간의 수정을 가졌다. 나는 어떤 대답도 언급되지 않았다는 것을 알아 차렸다 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]