2009-05-10 7 views
5

Derby 서버에서 각 테이블의 제한 조건 이름을 검색하기 위해 스키마의 시스템 테이블에있는 정보를 사용하여 select 문을 작성하는 방법은 무엇입니까?Derby - 제한 사항

답변

6

해당 설명서는 Derby Reference Manual입니다. 가능한 많은 버전이 있습니다 : 10.13 4 월 2017 년 현재 이었지만, 5 월 10.3을했다 2009 년

원래 대답

SELECT c.constraintname, t.tablename 
    FROM sysconstraints c, systables t 
    WHERE c.tableid = t.tableid; 

더비 충분히 최신 버전이 필요하기 때문에 시스템 카탈로그 테이블이 (10.13가 commentkiwicomb123에 의해 인용) sys. 접두어, 당신은 명시를 사용하도록 쿼리를 수정 너무 표기 가입 및 사용 할 수 있습니다

SELECT c.constraintname, t.tablename 
    FROM sys.sysconstraints c 
    JOIN sys.systables t 
    ON c.tableid = t.tableid; 

추가 열을 추가 할 수 있습니다 (예 : c.type). 제한 유형을 가져올 수 있습니다.

+0

제한 조건 유형을 알 수있는 방법이 있습니까? –

+1

내가 RTFM을 할 수 있다고 생각합니다. Sysconstraints.Type은 'U'(고유), 'P'(기본), 'F'(외래 키) 또는 'C'(확인) 중 하나의 값을 갖는 CHAR (1) 필드입니다. 그러나 문서에 대한 포인터가 있으면 일반적으로 문서를 읽고 읽는 것이 좋습니다. –

+0

이 쿼리는 Derby 10.13에서 작동하지 않으므로 sysconstraints 및 sysconstraints 테이블 이름 앞에 "sys."접두어를 붙여야합니다. 예 : sysconstraints 대신 sys.sysconstraints를 사용하십시오. – kiwicomb123

2
SELECT sc.schemaname, co.constraintname, t.tablename, cg.descriptor, t2.tablename, cg2.descriptor, f.deleterule, f.updaterule 
FROM sys.sysconstraints co 
JOIN sys.sysschemas sc ON co.schemaid = sc.schemaid 
JOIN sys.systables t ON co.tableid = t.tableid 
JOIN sys.sysforeignkeys f ON co.constraintid = f.constraintid 
JOIN sys.sysconglomerates cg ON f.conglomerateid = cg.conglomerateid 
JOIN sys.sysconstraints co2 ON f.keyconstraintid = co2.constraintid 
JOIN sys.systables t2 ON co2.tableid = t2.tableid 
JOIN sys.syskeys k ON co2.constraintid = k.constraintid 
JOIN sys.sysconglomerates cg2 ON k.conglomerateid = cg2.conglomerateid 
WHERE co.type = 'F' 
    and sc.schemaname = current schema  

두 서술자 엔트리

BTREE 같이 각 테이블 열 번호의 목록을 포함하는 번호를위한 SYSCOLUMNS 테이블의 열 번호에 해당하는 (2,1)

해당 테이블.

누구든지이 쿼리에서이 정보를 추출하는 우아한 방법을 알고 싶습니다. 별도의 쿼리에서 테이블에 대한 모든 열의 목록을 가져오고 설명자를 파싱 한 후 그 이름을 추출하여 숫자를 가져옵니다.

관련 문제