多くのテーブル(約200)を含むSQL Server 2008 Dbで作業しています。これらのテーブルの多くには、「CreatedDate」という名前のフィールドが含まれています。この特定のフィールドですべてのテーブルスキーマを識別しようとしています。
これを行うSQLクエリはありますか?
Information_schemaを照会します-これには、基礎となるテーブルよりもはるかに読みやすいビューがあります。
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%create%'
また、これに利用できる多くのサードパーティツールの1つを使用して、これを実行することもできます。
クエリは単純な検索には適していますが、データをさらに操作する必要がある場合、参照を検索するなど、これらを使用してより良い仕事を行うことができます。
また、これらは、一部のオブジェクトが暗号化されており、検索する必要がある場合に非常に便利です
私は ApexSQL Search を使用していますが、これは無料ですが、Red GateやSSMS Tool 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で検索したい場合(そしてprocsを一致させる必要がある場合)、次を使用します...
SELECT name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Comment%'
これらの2つのクエリが非常に役立つことがわかりました。
このクエリを使用します:
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
私にとっては、クエリを実行するための読み取りアクセス権しかないため、この関数を頻繁に使用する必要があります。
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%'
同じことですが、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%