programing

기존 열의 기본값을 설정하는 방법

bestprogram 2023. 4. 7. 22:00

기존 열의 기본값을 설정하는 방법

이것은 SQL Server 2008에서는 동작하지 않습니다.

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

에러는 다음과 같습니다.

키워드 'SET' 근처의 구문이 잘못되었습니다.

내가 뭘 잘못하고 있지?

이것은 SQL Server에서 동작합니다.

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn

이 경우 alter 열을 사용할 수 없습니다. 대신 add를 사용하십시오.

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn

올바른 방법은 다음과 같습니다.

  1. 다음 명령을 실행합니다.

    sp_help [table name] 
    
  2. 의 이름을 복사합니다.CONSTRAINT.

  3. 를 드롭 합니다.DEFAULT CONSTRAINT:

    ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
    
  4. 다음 명령을 실행합니다.

    ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
    

후다티쿠스의 솔루션은 완벽했습니다. 감사합니다. 하지만 저는 재실행할 필요가 있었고, 이 방법을 통해 그것이 완료되었는지 확인할 수 있었습니다.

IF EXISTS(SELECT * FROM information_schema.columns 
           WHERE table_name='myTable' AND column_name='myColumn' 
             AND Table_schema='myDBO' AND column_default IS NULL) 
BEGIN 
  ALTER TABLE [myDBO].[myTable] ADD DEFAULT 0 FOR [myColumn] --Hoodaticus
END

열의 기본값을 변경할 수 있는 시나리오는 두 가지가 있습니다.

  1. 테이블 작성 시
  2. 기존 테이블의 기존 열을 수정합니다.

  1. 테이블 작성 시 / 신규 컬럼 작성 시.

쿼리

create table table_name
(
    column_name datatype default 'any default value'
);
  1. 기존 테이블의 기존 열 수정

이 경우 SQL Server는 기존 기본 제약 조건 값을 수정할 수 없습니다.따라서 기본값을 변경하려면 기존 시스템 생성 또는 사용자 생성 기본 제약 조건을 삭제해야 합니다.그런 다음 특정 열에 대해 기본값을 설정할 수 있습니다.

몇 가지 절차를 따릅니다.

  1. 열에 대한 모든 기존 기본값 제약 조건을 나열합니다.

이 시스템 데이터베이스 프로시저를 실행합니다.이 프로시저는 테이블 이름을 파라미터로 사용합니다.테이블 내의 모든 열에 대한 모든 구속조건 목록을 반환합니다.

execute [dbo].[sp_helpconstraint] 'table_name'
  1. 열에 대한 기존 기본 제약 조건을 삭제합니다.

구문:

alter table 'table_name' drop constraint 'constraint_name'
  1. 해당 열에 대한 새 기본값 제약 조건 추가:

구문:

alter table 'table_name' add default 'default_value' for 'column_name'

건배 @!!!

첫 번째 드롭 제약

https://stackoverflow.com/a/49393045/2547164

DECLARE @ConstraintName nvarchar(200)
SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS
WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__')
AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns
                        WHERE NAME = N'__ColumnName__'
                        AND object_id = OBJECT_ID(N'__TableName__'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName)

두 번째 기본값 생성

ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]

기본 이름을 가진 제한이 이미 존재하는 경우:

-- Drop existing default constraint on Employee.CityBorn
DECLARE @default_name varchar(256);
SELECT @default_name = [name] FROM sys.default_constraints WHERE parent_object_id=OBJECT_ID('Employee') AND COL_NAME(parent_object_id, parent_column_id)='CityBorn';
EXEC('ALTER TABLE Employee DROP CONSTRAINT ' + @default_name);

-- Add default constraint on Employee.CityBorn
ALTER TABLE Employee ADD CONSTRAINT df_employee_1 DEFAULT 'SANDNES' FOR CityBorn;

다음 구문을 사용할 수 있습니다.자세한 내용은 다음 문답을 참조하십시오.기본값이 있는 열을 SQL Server의 기존 테이블에 추가합니다.

구문:

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.

다른 방법:

테이블을 마우스 오른쪽 버튼으로 클릭하고 설계를 클릭한 다음 기본값을 설정할 열을 클릭합니다.

그런 다음 페이지 하단에 기본값 또는 바인딩을 추가합니다. 문자열의 경우 '1' 또는 int의 경우 '1'과 같은 값을 입력합니다.

이전에 null이었던 기존 열을 변경할 수 있는 3가지 간단한 단계를 찾았습니다.

update   orders
set BasicHours=0 where BasicHours is null

alter table orders 
add default(0) for BasicHours

alter table orders 
alter  column CleanBasicHours decimal(7,2) not null 

다음 명령을 사용해 보십시오.

ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
ALTER TABLE tblUser
 ADD CONSTRAINT DF_User_CreatedON DEFAULT GETDATE() FOR CreatedOn

스크립트를 오류 없이 여러 번 실행할 수 있도록 체크한 Yuck의 답변처럼.(information_communications.drives를 사용하는 것보다 코드/커스텀 문자열이 적음)

IF object_id('DF_SomeName', 'D') IS NULL BEGIN
    Print 'Creating Constraint DF_SomeName'
   ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
END

언급URL : https://stackoverflow.com/questions/6791675/how-to-set-a-default-value-for-an-existing-column