2017-11-15 6 views
1

単語「VAP」または取り消しを含む列を探したいと思っていました。問題は私たちのサーバーにいくつかのデータベースがあることです。どのデータベース/テーブルにこれらの単語からなる列名が含まれているかを知りたかったのです。すべてのデータベースから列名を検索するために使用できるクエリがある場合は誰にでもお知らせください。私は以下のクエリを試してみましたが、それは単一のデータベースから検索するのに役立ちます。すべてのデータベースから特定の列を検索するSQLクエリ

select distinct 
    t.name as TableName, 
    SCHEMA_NAME(t.schema_id) as TableSchema, 
    c.name as ColumnName, 
    ct.name as ColumnDataType, 
    c.is_nullable as IsNullable 
from 
    sys.tables t with(nolock) 
inner join 
    sys.columns c with(nolock) on t.object_id = c.object_id 
inner join 
    sys.types ct with(nolock) on ct.system_type_id = c.system_type_id 
where 
    c.name like '%VAP%' 
order by 
    t.name 
+0

から選択

*あなたはどのように多くのデータベースを持っていますか? –

+1

すべてのデータベースに対して同じクエリを実行します。https://stackoverflow.com/questions/18462410/how-to-run-the-same-query-on-all-the-databases-on-an-instance – Alex

答えて

0

データベース・オブジェクトを検索する必要がある場合(例えば、テーブル、カラム、トリガー)名前では - これを行いSQL Search呼ばFREEレッドゲートのツールを見ている - それはすべてのためにデータベース全体を検索文字列の種類。

enter image description here

enter image description here

それは任意のDBAやデータベース開発者のための素晴らしい必携ツールだ - 私はすでに、それは絶対に使用のいずれかの種類のために使用する無料です言及しませんでした?

0

は、私は、これは少し長いですけど、あなたは詳細を取得するために任意のサードパーティアプリケーション

USE [master] 
GO 
DECLARE @Search VARCHAR(50)='A',@SQL VARCHAR(MAX) 
DECLARE @Min INT,@Max INT 
DECLARE @Table TABLE 
(
    SeqNo INT IDENTITY(1,1), 
    DatabaseNm VARCHAR(255), 
    TableName VARCHAR(255), 
    ColumnName VARCHAR(255) 
) 
DECLARE @TEMP TABLE 
(
    SeqNo INT IDENTITY(1,1), 
    Qry VARCHAR(MAX) 
) 

INSERT INTO @TEMP 
(
    Qry 
) 
SELECT 
    Qry = 'SELECT 
     DbNm = '''+name+''', 
     TblNm = [TABLE_SCHEMA]+''.''+[TABLE_NAME], 
     COlNm = COLUMN_NAME 
     FROM ['+name+'].INFORMATION_SCHEMA.COLUMNS 
      WHERE COLUMN_NAME LIKE ''%'+ISNULL(@Search,'')+'%''' 
    FROM sys.databases 

SELECT 
    @Min = MIN(SeqNo), 
    @Max = MAX(SeqNo) 
    FROM @TEMP 

WHILE ISNULL(@Min,0)<=ISNULL(@Max,0) 
BEGIN 

    SELECT 
     @SQL = Qry 
     FROM @TEMP 
      WHERE SeqNo = @Min 

    INSERT INTO @Table 
    (
     DatabaseNm, 
     TableName, 
     ColumnName 
    ) 
    EXEC(@SQL) 


    SELECT 
     @Min = ISNULL(@Min,0)+1 
END 


SELECT 
    * 
    FROM @Table 
0

使用sp_MSForeachdbを使用したくない場合は、このクエリを使用することができます。以下の質問をお試しください。


テーブル#TEMP (DBNAMEのVARCHAR(100)、 テーブル名のVARCHAR(100) )を作成

master..sp_MSForeachdb EXECUTE ' USEの[枚] IF ''?'」< > '' マスター '' と ''? '' <> '' モデル '' と ''? '' <> '' msdbの '' と ''? '' <> '' のtempdb '' を はBEGIN

IF(EXISTS(SELECT *INFORMATION_SCHEMA.columns COLUMN_NAME = '' VAP 'FROM')) は#TEMP挿入 をBEGIN 'を選択 '? ''、COLUMN_NAMEは= '' VAP '

INFORMATION_SCHEMA.columns FROM TABLE_NAME

END 「#TEMP

関連する問題