2015-01-09 5 views
1

특정 열이없는 테이블을 찾는 방법. 예 : ID 열이 표 Contact에 없으면 Contact 표가 결과 집합에 포함됩니다. 특정 열이없는 테이블 찾기 SQL Server

내가 시도 :
SELECT DISTINCT t.name 
FROM sys.tables t 
INNER join sys.columns C ON c.object_id = t.object_id 
WHERE c.name <> 'ID' 

그러나 쿼리 위

ID이 거기에 존재하는 모든 테이블을 반환합니다.

+0

은 [링크] (http://stackoverflow.com/questions/133031/how-to-check를보십시오 .. 다음, 시스템 테이블을보고 싶어 down't 경우 -if-column-exists-in-sql-server-table) 도움이되는 경우 – Abhi

+0

@Abhi 특정 열이있는 테이블을 찾는 데 사용됩니다. 그러나이 경우 나는 그것의 정확한 반대를 요구했다. –

+0

쿼리가 작동합니다. 값이 "ID"이거나 EmpID와 같이 "ID"가 포함 된 열 이름을 원하십니까? – Adil

답변

1

u는이 쿼리를 시도 할 수

SELECT * FROM sys.tables WHERE type = 'U' AND object_id NOT IN (
SELECT DISTINCT c.object_id FROM sys.columns c WHERE c.name = 'ID') 
+2

체크 'U'가있는 테이블 이후로 답변으로 표시됩니다 –

1
SELECT name 
FROM sys.Tables 
WHERE Object_ID NOT IN (SELECT Object_ID FROM sys.Columns WHERE name = 'ID') 
1

당신은 당신은 단지 ID 열이 있고 OBJECT_ID의이 NOT IN(..the subquery..)를 사용하여 제외 테이블을 식별하는 하위 쿼리를 추가 할 수 있습니다, 조인을 수행 할 필요가 없습니다 : 당신은 단순히 = ID 아닌 모든 컬럼을 받고 있기 때문에

SELECT DISTINCT t.name 
FROM sys.tables t 
WHERE t.object_id NOT IN (SELECT object_id FROM sys.columns WHERE name = 'id') 

쿼리가 작동하지 않는 이유는 각각의 테이블에 많은 열이 s가 해당 기준과 일치하므로 ID 열이 있어도 반환됩니다. ,

SELECT OBJECT_SCHEMA_NAME(t.object_id) AS SchemaName 
     , t.name AS TableName 
FROM sys.tables t 
WHERE NOT EXISTS (SELECT * 
        FROM sys.columns c 
        WHERE c.object_id = t.object_id 
          AND c.name = 'ID'); 
1

한 가지 방법이다.

SELECT tableName 
FROM  (
      SELECT DISTINCT 
        t.name AS tableName 
       ,c.name AS columnName 
      FROM sys.tables t 
      INNER JOIN sys.columns C 
        ON c.object_id = t.object_id 
     ) AS t 
WHERE columnName NOT IN('ID') 
GROUP BY tableName 
1

는 다음을 시도 ID를 가진 모든 테이블 이름을 나열하지 존재와

0

당신은

SELECT DISTINCT OBJECT_NAME(OBJECT_ID) TableName FROM SYS.COLUMNS WHERE NAME <> 'id' 
and OBJECTPROPERTY (OBJECT_ID, 'IsUserTable') = 1 

EXCEPT 

SELECT DISTINCT OBJECT_NAME(OBJECT_ID) TableName FROM SYS.COLUMNS WHERE NAME = 'id' 
+0

@Downvoter : 왜 다운 voted 이유를 알 수 있습니까? – SouravA

+0

나는 downvoter가 아니지만이 쿼리는 @Ankush_Madankar가 요청한 결과를 반환하지 않습니다. 이 쿼리에는 테이블에 둘 이상의 열이있는 경우 id 열이있는 테이블이 포함됩니다. –

+0

테이블에 열이 하나 밖에없고 그 테이블이 'id'라면 그 테이블은 나타나지 않을 것입니다. – SouravA