2017-11-09 10 views
0

SQL Server에서 하나 이상의 열이있는 기본 키가있는 테이블이 있습니다. 나는 테이블에 기본 키의 열을 얻기 위해이 쿼리를 사용하여 :질의 결과에서 우선 순위에 따라 정렬 된 SQL Server의 기본 키 구성원 열을 얻는 방법은 무엇입니까?

SELECT * 
FROM 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name 
    AND Col.Table_Name = Tab.Table_Name 
    AND Constraint_Type = 'PRIMARY KEY' 
    AND Col.Table_Name = 'Code Field Information' 

이 쿼리는 세 개의 열, 기본 키의 멤버를 반환합니다. 그러나 'Code Field information'테이블에서 Order 절없이 쿼리를 실행하면 결과의 정렬이 위의 쿼리와 동일하지 않습니다. 정렬 우선 순위에 따라 기본 키 열을 가져올 수 있습니까?

+2

오늘의 팁 : 현대적이고 명시적인'JOIN' 구문으로 전환하십시오. 쓰기가 쉬우 며 (오류없이), 읽기 쉽고 유지 관리가 쉬우 며 필요한 경우 외부 조인으로 변환하기 쉽습니다. – jarlh

+0

_Columns_, 필드가 아닙니다. – jarlh

+0

'주문 하시겠습니까? 이 경우 'ORDER BY ASC'를 오름차순으로 정렬하거나 'DESC'를 내림차순으로 정렬합니다. – Zorkolot

답변

0

글쎄,이 방법은 결과를 순서대로 자신의 우선 순위에 대한 기본 키의 멤버를 주문 결과를 반환합니다.

SELECT i.name AS IndexName, OBJECT_NAME(ic.OBJECT_ID) AS TableName, COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName 
    FROM sys.indexes AS i 
    INNER JOIN sys.index_columns AS ic 
    ON i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id 
    WHERE i.is_primary_key = 1 AND OBJECT_NAME(ic.OBJECT_ID) = 'Code Field Information' 
0

결과가 매번 동일하게 유지되도록하려면 결과를 주문해야합니다. 나는 당신이 Constraint_Type라는 열을 가지고 있다는 것을 보았습니다. 당신의 예에서 추측 한 것은 주키이고 유일한 것입니다. 고유 한 값 (시간 경과에 따라 계속 유지 됨)은 좋은 후보입니다.

사실 인 경우 해당 열을 사용하여 결과를 정렬합니다.

그래서 쿼리는 또한 역순에 대한 ORDER BY Constraint_Type DESC을 사용할 수 있습니다 (이하지 않는 것이 좋습니다 쿼리 구문입니다하지만 당신에 가장 가까운입니다)

SELECT * 
FROM 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name 
    AND Col.Table_Name = Tab.Table_Name 
    AND Constraint_Type = 'PRIMARY KEY' 
    AND Col.Table_Name = 'Code Field Information' 
ORDER BY Constraint_Type 

처럼 보일 것입니다. 이제 쿼리 횟수에 관계없이 결과가 동일하게 나타납니다. Ofc, 데이터가 변경되지 않은 경우

자주 사용하려는 경우 신속하게 수행해야하는 경우 해당 열에 대해 해당 테이블에 인덱스를 추가하는 것이 좋습니다.