2013-03-08 2 views
4

ACIPin의 기본 키 'pkey'인 CDRLive에 'IPkey'라는 새 열을 추가하려고합니다. pkey는 bigint이며 null이 아닙니다.새 열을 추가하고 외래 키 관계 설정

ALTER TABLE CDRLive ADD IPkey bigint NOT NULL 
go 
ALTER TABLE CDRLive 
ADD CONSTRAINT CDRLive_IPkey FOREIGN KEY(IPkey) REFERENCES ACIPin(pkey) 

실패했습니다. 이 오류는 : 당신이 원하는 경우

Msg 4901, Level 16, State 1, Line 2 
ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT  definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column. Column 'IPkey' cannot be added to non-empty table 'CDRLive' because it does not satisfy these conditions. 
Msg 1769, Level 16, State 1, Line 1 

Foreign key 'CDRLive_IPkey' references invalid column 'IPkey' in referencing table 'CDRLive'. 
Msg 1750, Level 16, State 0, Line 1 
Could not create constraint. See previous errors. 
+0

실행 후 오류 메시지? –

+0

오류가 업데이트되었습니다. –

+0

'IPkey'와'ACIPin.pkey'는 같은 컬럼 정의를 가지고 있습니까? –

답변

13

열은 다음과 같은 순서로 그것을 할 필요가 NOT NULL 제약 조건이있다.

  1. ALTER TABLE CDRLive ADD IPkey bigint NULL go
  2. 는 사용자가 원하는 데이터가있는 열을 채 웁니다.
  3. ALTER TABLE CDRLive ADD IPkey bigint NOT NULL go
  4. ALTER TABLE CDRLive ADD CONSTRAINT CDRLive_IPkey FOREIGN KEY(IPkey) REFERENCES ACIPin(pkey)
+0

2 단계에서 where 절을 사용하여 ACIPin에서 데이터를 채울 수 있습니다. 주문이 정확한지 확인하고 싶습니다. –

+0

@Love 예, 올바른 외래 키를 'CDRLive'에 할당하기 위해 데이터를 기반으로하는 방법을 찾아야합니다. 또는 이전 데이터를 신경 쓰지 않는다면 graceemile이 모든 이전 행에 0을 삽입하고 'WITH NOCHECK' 절을 사용하여 외래 키를 생성한다고 말할 수 있습니다. –

+0

"GO"는 [this answer] (http://stackoverflow.com/a/2299280/1764416)에서 말한 것처럼 비 SQL 고유의 배치 종결 자입니다. – FranciscoBouza