2017-06-09 14 views
0

私のDBテストでは、400テーブルあります。カラムIDがどのテーブルに存在し、どのテーブルにカラムIDが存在しないかを知りたいと思います。SQLカラムが存在しません

enter image description here

(写真を参照)私はこのクエリをしようと試みたが、動作しません。何が最善の方法ですか?

SELECT COLUMNS.TABLE_NAME, 'Yes' As MyCol_ID 
FROM INFORMATION_SCHEMA.COLUMNS COLUMNS, 
    INFORMATION_SCHEMA.TABLES TABLES 
WHERE COLUMNS.TABLE_NAME = TABLES.TABLE_NAME 
    AND Upper(COLUMNS.COLUMN_NAME) = Upper('ID') 
    AND TABLES.TABLE_TYPE='BASE TABLE' 
    order by COLUMNS.TABLE_NAME 

UNION 

SELECT COLUMNS.TABLE_NAME, 'No' As MyCol_ID 
FROM INFORMATION_SCHEMA.COLUMNS COLUMNS, 
    INFORMATION_SCHEMA.TABLES TABLES 
WHERE COLUMNS.TABLE_NAME = TABLES.TABLE_NAME 
    AND Upper(COLUMNS.COLUMN_NAME) <> Upper('ID') 
    AND TABLES.TABLE_TYPE='BASE TABLE' 
    order by COLUMNS.TABLE_NAME 

答えて

1

私はsys.バリアントを好んでいます。あなたのテストDBの文脈でこれを実行してください:

SELECT T.NAME, CASE WHEN C.NAME = 'my_ColID' THEN 'YES' ELSE 'NO' END 
FROM SYS.TABLES T 
LEFT JOIN SYS.COLUMNS C ON C.object_id = T.object_id 
         AND C.NAME = 'my_ColID' 
ORDER BY T.NAME 
+0

ありがとうございます! ;-)あなたの質問はOKです。 – Alan392

2

一つの方法は、基本的にleft joinある:私は、スキーマ名ならびにテーブル名を含むように参加固定

select t.table_schema, t.table_name, 
     (case when c.column_name is null then 'no' else 'yes' end) as id_exists 
from information_schema.tables t left join 
    information_schema.columns c 
    on t.table_name = c.table_name and t.table_schema = c.table_schema and 
     c.column_name = 'ID' 
where t.table_type = 'BASE_TABLE'; 

注意。

+0

あなたの応答に感謝しますが、このクエリは値を返しませんが、AaronはOKです。 – Alan392

関連する問題