web-dev-qa-db-ja.com

すべてのテーブルのスキーマを検索するSQLクエリ

多くのテーブル(約200)を含むSQL Server 2008 Dbで作業しています。これらのテーブルの多くには、「CreatedDate」という名前のフィールドが含まれています。この特定のフィールドですべてのテーブルスキーマを識別しようとしています。

これを行うSQLクエリはありますか?

35
pencilslate

Information_schemaを照会します-これには、基礎となるテーブルよりもはるかに読みやすいビューがあります。

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%create%'
51
Raj More

また、これに利用できる多くのサードパーティツールの1つを使用して、これを実行することもできます。

クエリは単純な検索には適していますが、データをさらに操作する必要がある場合、参照を検索するなど、これらを使用してより良い仕事を行うことができます。

また、これらは、一部のオブジェクトが暗号化されており、検索する必要がある場合に非常に便利です

私は ApexSQL Search を使用していますが、これは無料ですが、Red GateやSSMS Tool Packなど、市場にはさらに多く(無料)もあります。

6
Dwoolk
  select object_name(c.object_id) as table_name
    , schema_name(t.schema_id) as schema_name
    from sys.columns c
    join sys.tables t on c.object_id = t.object_id
     where c.name=N'CreatedDate';

他のテーブルプロパティも必要な場合はもう少し複雑になりますが、 sys.tablessys.columns などのオブジェクトカタログビューを参照します。

5
Remus Rusanu

お気に入り...

SELECT objParent.name AS parent, obj.name, col.*
FROM sysobjects obj 
    LEFT JOIN syscolumns col
        ON obj.id = col.id
    LEFT JOIN sysobjects objParent
        ON objParent.id = obj.parent_obj
WHERE col.name LIKE '%Comment%'
   OR obj.name LIKE '%Comment%'

上記で「コメント」を検索しています。

直接一致させる場合は、パーセント記号を削除します。

これにより、テーブル、フィールド、および主キー名、制約、ビューなどが検索されます。

そして、テーブルと猿の後にStoredProcsで検索したい場合(そしてprocsを一致させる必要がある場合)、次を使用します...

SELECT name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Comment%'

これらの2つのクエリが非常に役立つことがわかりました。

2
Allbite

このクエリを使用します:

SELECT 
    t.name AS table_name,
    SCHEMA_NAME(schema_id) AS schema_name,
    c.name AS column_name , *
FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
Where 
    ( c.name LIKE '%' + '<ColumnName>' + '%' )
    AND 
    ( t.type = 'U' ) -- Use This To Prevent Selecting System Tables
1

私にとっては、クエリを実行するための読み取りアクセス権しかないため、この関数を頻繁に使用する必要があります。

SELECT  *
FROM    INFORMATION_SCHEMA.TABLES
where   TABLES.TABLE_NAME like '%your table name here%'

.TABLESを.COLUMNSに置き換えると、次のようになります。

 SELECT *
 FROM   INFORMATION_SCHEMA.COLUMNS
 WHERE  columns.COLUMN_NAME like '%your column name here%'
1
UrbanBackpacker

同じことですが、ANSIの方法で

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'CreateDate')

0
Tamil.SQL

SQL Server 2008では、このためにSQLクエリを入力する必要はありません。

SSMSオブジェクトエクスプローラーで、必要なデータベースのデータベースまたはテーブルを選択し(1つのデータベースで検索する必要がある場合)、[表示]メニューの[オブジェクトエクスプローラーの詳細](またはF7キーを押します)を開き、[検索]テキストボックスに「%CreatedDate%