多くのテーブル(約200)を含むSQL Server2008Dbに取り組んでいます。これらのテーブルの多くには、「CreatedDate」という名前のフィールドが含まれています。この特定のフィールドですべてのテーブルスキーマを識別しようとしています。
これを行うためのSQLクエリはありますか?
多くのテーブル(約200)を含むSQL Server2008Dbに取り組んでいます。これらのテーブルの多くには、「CreatedDate」という名前のフィールドが含まれています。この特定のフィールドですべてのテーブルスキーマを識別しようとしています。
これを行うためのSQLクエリはありますか?
information_schemaにクエリを実行します。これには、基になるテーブルよりもはるかに読みやすいビューがあります。
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%create%'
また、これに利用できる多くのサードパーティツールの1つを使用してこれを試すこともできます。
クエリは単純な検索には最適ですが、データをさらに操作する必要がある場合は、参照を検索するなど、これらを使用してはるかに優れた作業を行うことができます。
また、これらは、一部のオブジェクトが暗号化されており、検索する必要がある場合に非常に便利です。
私は無料のApexSQLSearchを使用していますが、RedGateやSSMSTool Packなど、さらに多くの(無料の)市場もあります。
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.tables、sys.columnsなどのオブジェクトカタログビューを参照します。
お気に入り...
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を検索する場合(およびprocを一致させる必要がある場合)、次を使用します...
SELECT name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Comment%'
お役に立てば幸いです。これら2つのクエリが非常に役立つと思います。
私の場合、クエリを実行するための読み取りアクセス権しか持っていないので、この関数を頻繁に使用する必要があります。
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%'
このクエリを使用します:
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
同じことですが、ANSI方式です
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME ='CreateDate')
SQL Server 2008では、このためにSQLクエリを入力する必要はありません。
SSMSオブジェクトエクスプローラーで、必要なデータベースのデータベースまたはテーブルを選択し(1つのデータベースで検索する必要がある場合)、メニュー[表示]-> [オブジェクトエクスプローラーの詳細]を開き(またはF7キーを押します)、[検索]テキストボックスに%CreatedDate%と入力し、Enterキーを押します。