2017-09-05 7 views
0

나는 내가 액세스 한 다른 데이터베이스 테이블을 참조하는 액세스 권한을 가진 동의어의 기본 키 열을 가져 오려고합니다. jdbc의 connection.getMetaData(); metaData.getPrimaryKeys(dbname,schemaName , synonymName);을 시도했지만 emty 결과를 얻었습니다. 또한 다음과 같은 SQL을 실행하는 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME LIKE 'synonymName' AND CONSTRAINT_NAME LIKE 'PK%';SQL 서버 : 다른 SQL 서버 데이터베이스를 참조하는 동의어의 기본 키 제약 조건 열을 나열하는 방법은 무엇입니까?

SELECT * FROM sys.objects WHERE type = 'PK' AND parent_object_id = OBJECT_ID (synonymName);

를 조회하지만 도움이되지 않았다 시도했다. 따라서 테이블 참조가 다른 DB에있는 동의어의 기본 키 제한을 가져 오는 방법이 있습니다. 여기에는 직접적인 초과가 없습니다.

답변

0

아래 검색어를 사용해보십시오. 다른 데이터베이스의 기본 테이블 인 경우 데이터베이스 이름 앞에 접두어를 사용해야 할 수도 있습니다. 이것은 시작하는 것이 좋을 것입니다.

select c.*, ob.name 
from 
    sys.columns c 
    inner join sys.synonyms s on c.object_id = object_id(s.base_object_name) 
    INNER JOIN sys.objects ob ON c.object_id = ob.object_id 
    INNER JOIN sys.indexes i ON i.object_id = c.Object_id 
    INNER JOIN sys.index_columns ic ON i.OBJECT_ID = ic.OBJECT_ID 
    AND i.object_id = ic.object_id AND 
    i.index_id = ic.index_id and i.is_primary_key = 1 
    AND ic.column_id = c.column_id 
where 
    s.name = 'synonymName'