2017-10-24 5 views
0

저는 SQL Server 프로그래밍을 처음 접했습니다. 오늘 저는 컬럼에 대한 기본값을 정의하는 두 가지 다른 전략을 발견했습니다. 전문가의 차이점을 물어볼 것입니다.간단히 DEFAULT를 설정하고 SQL Server의 열에 CONSTRAINT를 설정하십시오.

이 테이블 감안할 :

CREATE TABLE [dbo].[Data] 
(
    [RecDataW] [datetime] NULL 
) 

발췌문 # 1 :

ALTER TABLE [dbo].[DatiSetup] 
    ADD DEFAULT (GETDATE()) FOR [RecDataW] 
GO 

발췌문 # 2 :

ALTER TABLE [dbo].[DatiSetup] 
    ADD CONSTRAINT [DF_DatiSetup_RecDataW] DEFAULT (GETDATE()) FOR [RecDataW] 
GO 
+3

이들은 모두 동일합니다. DEFAULT'는'CONSTRAINT'이며, 둘 사이의 유일한 차이점은 당신이 명시 적으로 두 번째 것에 제약 조건'DF_DatiSetup_RecDataW'를 지정했으나 첫 번째 조건은 명시 적으로 명명하지 않았다는 것입니다. 또한'CREATE TABLE dbo.Data (RecDataW DATETIME NOT NULL DEFAULT GETDATE())'명령을 사용하여 이것을 단축 할 수 있습니다. – Siyual

답변

1

차이점은 명시 적으로 알려진 이름을 지정하는 것입니다. 양식

ALTER TABLE [dbo].[DatiSetup] 
    ADD DEFAULT (GETDATE()) FOR [RecDataW] 

은 이름을 기본값으로 만들지 만 이름은 시스템에서 생성되며 스크립트가 배포 된 환경마다 다를 수 있습니다. (개발, 테스트, UAT, 스테이징, 프로덕션, Bob의 데스크톱 등) 기본값을 변경해야하는 경우 문제가 될 수 있습니다.

양식

ALTER TABLE [dbo].[DatiSetup] 
    ADD CONSTRAINT [DF_DatiSetup_RecDataW] DEFAULT (GETDATE()) FOR [RecDataW] 

명시 적으로 이름 기본, 그래서 이름이 모든 환경에서 균일입니다. 어느 누구도 모든 환경에서 반복적으로 참조 할 수있는 방법이 있습니다. 기본값을 삭제하거나 변경해야하는 경우 기본값입니다.

지난 몇 년간 근무한 표준은 입니다. 항상 이름 제약 조건. [표준이 될 수있는 권한이 있기 때문에 때때로 표준입니다. 때로는 다른 사람이 이미 표준으로 만들었습니다.]

또한 첫 번째 시스템 생성 이름이 후속 환경에서 사용되는 SQL을 개발하고 배포하는 방법이 있습니다. 사용 된 도구는 명시 적으로 일치하도록 하류로 제약 조건의 이름을 지정합니다. 레드 게이트 SQL 소스와 SQL 비교. 그럼에도 불구하고 모든 제약 조건의 이름을 지정하십시오.

0

처럼 Siyual 그의 주석에서 말했다,이 같은 일이다. 기본값은 사용자를 위해 제한 조건을 작성하는 것입니다. 기본값으로 제한 조건을 작성하면 사용자가 명명 한 제한 조건이 작성됩니다. documentation on default constraints here을 찾을 수 있습니다.

0

기본값을 사용하면 이름을 지정할 수 있지만 기본값은 임의로 이름을 만듭니다. 이에 대한 좋은 예는 멀티 테넌트 환경에서 작업 할 때입니다. 데이터베이스의 사본이 여러 개있는 응용 프로그램 (예 : 임차인 당 하나)이 있으면 기본값이 명시 적으로 지정되지 않은 경우 나중에 변경/유지/배포를 수행하기가 어려울 것입니다.