2016-12-13 5 views
1

로 정의해야합니다 내가 가진 테이블,열은 같은 길이와 규모

CREATE TABLE tmpOne(testID INT IDENTITY (1,1), 
ID AS ('ABC'+ (CASE WHEN len(testID) <=3 THEN CAST(RIGHT(0.001*testID, 3) AS VARCHAR) ELSE CAST(testID AS VARCHAR) END))PERSISTED UNIQUE, 
Ename VARCHAR(20)) 

나는 테이블 #tmpone의 I의 ID를 의미 열 PID와 다른 테이블의 #temptwo을 만들려면 등이

CREATE TABLE tmptwo(ID VARCHAR FOREIGN KEY REFERENCES tmpone(ID)) 

스피 점점 오류 않았다 외래 키 관계에 참여 -Columns은 같은 길이와 규모로 정의해야합니다.

어떻게 제거 할 수 있습니까?

당신은 당신의 코드를 사용하여 임시 테이블이 아니라 당신이 할 수있는 실제 테이블로 참조 열을 만들 수 없습니다

답변

1

첫 번째 테이블 - CAST(... AS VARCHAR)
varchar로 캐스팅하지만 길이는 지정하지 않습니다. CREATE TABLE ... (ID VARCHAR ...)
당신은 VARCHAR 컬럼을 선언하지만 길이를 지정하지 않은 -
기본 길이는 30 (+ 'ABC'길이)

2 테이블입니다. n이 생략되면 캐스트를 사용하는 경우 해당 데이터 정의 나 변수 선언 문에 지정되어 있지 않은 경우
기본 길이 1

https://msdn.microsoft.com/en-us/library/ms176089.aspx

인 기본 길이가 1 인 CONVERT 기능을 사용하는 경우 기본 길이는 30입니다.

두 테이블에서 길이를 선언해야하며 기본값을 사용해서는 안됩니다. 또한 계산 된 열 표현식을 cast/left으로 감쌀 경우 놀라지 않을 것입니다.

CREATE TABLE tmpOne 
(
    testID INT IDENTITY (1,1) 
    ,ID  AS (cast ('ABC'+ (CASE WHEN len(testID) <=3 THEN CAST(RIGHT(0.001*testID, 3) 
        AS VARCHAR(100)) ELSE CAST(testID AS VARCHAR(100)) END) 
         as varchar(100))) PERSISTED UNIQUE 
    ,Ename VARCHAR(20) 
) 


CREATE TABLE tmptwo(ID VARCHAR (100) FOREIGN KEY REFERENCES tmpone(ID)) 
+0

그들을 선언 시도 너무 감사합니다 근무 업데이트 된 답변 –

+0

을 제공으로 –

+0

참조 +3 ('ABC'의 길이)입니다 완벽한 때문에 첫 번째 테이블 당신에게 VARCHAR은 (30) 테이블 모두에서 여전히이 같은 오류 –

2

:

이대로 더 온도가이 FOREIGN KEY 제약 조건 '#tmptwo'를 건너 뛰는 정의 "로 오류를 제공을 . 임시 테이블에 대한 FOREIGN KEY 제약 조건은 로컬 또는 전역 임시 테이블에 적용되지 않습니다은 "하지만 비트 변화와 같은 코드는 물리적 테이블 작동 :.

CREATE TABLE tmpOne(testID INT IDENTITY (1,1), 
ID AS 
    CAST(('ABC'+ (CASE WHEN len(testID) <=3 THEN 
     CAST(RIGHT(0.001*testID, 3) AS VARCHAR(20)) 
    ELSE CAST(testID AS VARCHAR(20)) END)) as VARCHAR(50)) PERSISTED UNIQUE, 
Ename VARCHAR(20)) 

CREATE TABLE tmptwo(ID VARCHAR(50) FOREIGN KEY REFERENCES tmpone(ID)) 

난 당신이 변경 :

를 식별 할 수 있습니다 확신

VARCHAR로 전체 열 값을 CAST하고 동일한 길이를 정의해야하며 다른 테이블의 참조 열에서 정의 할 수있는 실제 열 길이가됩니다.

+1

는 –