2012-01-08 1 views
5

나는이 SQL을 실행하는거야Sys.Tables를 쿼리 할 때 시스템 테이블을 제외하는 방법?</p> <pre><code>SELECT S.name as Owner, T.name as TableName FROM sys.tables AS T JOIN sys.schemas AS S ON S.schema_id = T.schema_id </code></pre> <p>을 그리고 그 결과는 다음과 같습니다 :

Owner TableName 
------------------------ 
dbo   Person 
dbo   Customer 
dbo   sysdiagrams 

sysdiagramssystem table하지만 결과에서 나타났다.

업데이트 : 모든 답변과 의견에 대한 감사합니다, 내가 사용 네이트 Bolam & vmvadivel 답변 :

SELECT S.name as Owner, T.name as TableName 
FROM 
    sys.tables AS T 
    INNER JOIN sys.schemas AS S ON S.schema_id = T.schema_id 
    LEFT JOIN sys.extended_properties AS EP ON EP.major_id = T.[object_id] 
WHERE 
    T.is_ms_shipped = 0 AND 
    (EP.class_desc IS NULL OR (EP.class_desc <>'OBJECT_OR_COLUMN' AND 
    EP.[name] <> 'microsoft_database_tools_support')) 
+0

'IS_MS_SHIPPED'는 (는) 예 : 복제를 지원하기 위해 데이터베이스에 추가 된 개체 (선택된 답변은 지원 다이어그램에 추가 된 개체를 제외하는 경우에만 유용합니다) –

+2

@Damien_The_Unbeliever : 불행히도 'sysdiagrams'테이블에는 'is_ms_shipped = 1'집합이 없습니다. 그래서 당신이 모든 시스템 테이블을 제외하려고 할 때 영향을받지 않을 것입니다 –

답변

8

SSMS는 확장 속성을 사용하여 sysdiagrams 테이블을 다음과 같이 표시합니다. 의사 시스템 테이블의 일종.

SELECT S.name as Owner, T.name as TableName FROM sys.tables AS T 
INNER JOIN sys.schemas AS S ON S.schema_id = T.schema_id 
LEFT JOIN sys.extended_properties AS EP ON EP.major_id = T.[object_id] 
WHERE (EP.class_desc IS NULL 
OR (EP.class_desc <> 'OBJECT_OR_COLUMN' 
    AND EP.[name] <> 'microsoft_database_tools_support')) 
+0

'sys.tables'는 이미 그것의 정의에'o.type = 'U'' 타입의 객체만을 선택하기 때문에'T. [Type] ='U '는 조금 중복되어 보입니다. –

+1

중복 된 T를 제거했습니다. [Type] = 'U' –

1

당신이 쿼리 아래로 시도시겠습니까, 감사

SELECT S.name as Owner, T.name as TableName FROM sys.tables AS T 
JOIN sys.schemas AS S ON S.schema_id = T.schema_id 
WHERE T.name <> 'sysdiagrams' 
+1

답해 주셔서 감사합니다. 이것은'sysdiagrams' 테이블 만 제외시킬 것이라고 생각합니다.하지만 모든 시스템 테이블을 제외시키는 일반적인 방법인지 알고 싶습니다. –

+0

보통, 생성 된 각 데이터베이스에는'sysdiagrams'라는 시스템 테이블이 하나만 있습니다. 그래서 우리는 위의 쿼리로 갈 수 있습니다. 시간 내 주셔서 감사합니다. –

3

당신은이에 대한 IS_MS_SHIPPED를 사용할 수있다 :

이 시도해보십시오. 희망하는 스크립트는 다음과 같습니다.

SELECT 
    S.[name] AS Owner, 
    T.[name] AS TableName 
FROM 
    sys.tables AS T JOIN sys.schemas AS S 
    ON S.schema_id = T.schema_id 
WHERE 
    T.is_ms_shipped = 0 
    AND T.[name] <> 'sysdiagrams' 
+0

StackOverflow에 오신 것을 환영합니다 : 코드, XML 또는 데이터 샘플을 게시하는 경우 ** 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바에서 "코드 샘플"버튼 ('{}) '을 클릭하십시오. 멋지게 포맷하고 구문을 강조하기 위해! –

+1

확실한 Marc_s. "코드 샘플"버튼에 대해 알려 주셔서 감사합니다. – vmvadivel

+2

유감스럽게도,이 테이블은'is_ms_shipped' 플래그가 설정되어 있지 않기 때문에'sysdiagrams' 테이블을 제외하지 않습니다 ** –

관련 문제