Programing

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

lottogame 2020. 3. 2. 13: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 column을 사용할 수 없으므로 대신 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]
    

Hoodaticus의 솔루션은 완벽했습니다. 감사합니다. 그러나 다시 실행할 수 있어야하고 완료되었는지 확인하기 위해이 방법을 찾았습니다 ...

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 서버는 기존 기본 제약 조건 값을 수정할 수 없습니다. 따라서 기본값을 변경하려면 기존 시스템 생성 또는 사용자 생성 기본 제약 조건을 삭제해야합니다. 그런 다음 특정 열에 대해 기본값을 설정할 수 있습니다.

몇 가지 단계를 수행하십시오.

  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'

건배 @ !!!


기본 이름으로 제한이 이미 존재하는 경우 :

-- 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;

ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]

이전에 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 

첫 번째 드롭 제약

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 Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address

Yuck의 대답처럼 스크립트를 오류없이 두 번 이상 실행할 수 있습니다. (info_schema.columns를 사용하는 것보다 코드 / 사용자 지정 문자열이 적음)

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

다음 구문을 사용할 수 있습니다. 자세한 내용은이 질문과 답변을 참조하십시오 . 기본값이있는 열을 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과 같습니다.

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



반응형