2010-01-07 4 views
0

..내가 작성해야 어떤 쿼리 말씀 해주십시오 테이블의 기본 키 이름과 기본 키 열 이름이 필요 2,005

+0

일종의 일반적인 데이터베이스 유틸리티로 작업하고 있다고 가정합니다. 그렇지 않으면 **이 정보를 이미 알아야합니다 **. 이 정보를 얻기 위해'sysobects'와'sysindexes' 시스템 테이블에 대한 쿼리를 작성합니다. 그러나 MS가 SQL Server의 이후 버전에서 유용한 메타 데이터보기를 제공한다는 사실을 알고 있습니다. 그리고 그것들을 사용하는 것이 더 나을 것입니다. –

+0

기본 키가 한 열만 참조 할 것으로 예상되는 것처럼 질문이 읽 힙니다. 이는 항상 사실과 다릅니다. 물론 모든 테이블에 PK가 없습니다. – MartW

답변

2
declare @tableName as nvarchar(100) 
set @tableName = 'table' 

select i.name, c.name 
from sys.index_columns ic 
    join sys.indexes i on ic.index_id=i.index_id 
    join sys.columns c on c.column_id=ic.column_id 
where 
    i.[object_id] = object_id(@tableName) and 
    ic.[object_id] = object_id(@tableName) and 
    c.[object_id] = object_id(@tableName) and 
    is_primary_key = 1 
+0

왜 100 개입니까? 시스템 이름은 128이 될 수 있습니다. – MartW

+0

정말 이유가 없습니다. 방금 짝수를 사용했습니다. –

+0

@Jonas : 128도 짝수입니다 :-) –

1

가 INFORMATION_SCHEMA 뷰를 사용하는 다른 옵션들

SELECT 
    cu.Table_Catalog, 
    cu.Table_Schema, 
    cu.table_name, 
    cu.Constraint_name , 
    cu.column_name 

FROM 
    sys.indexes si 
    inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu 
    on si.name = cu.constraint_name 
WHERE 
    is_primary_key = 1 
,
+0

+1 데이터베이스 별 sys 테이블보다 좋습니다. (@ SOLO : 얼마나 느린가? :) –

0

그냥 성능 노트 - INFORMATION_SCHEMA보기를 사용하는 선택보다 몇 배 빠른 sys 테이블을 사용합니다.