2016-10-27 4 views
1

が含まれているすべてのテーブル、クエリ、私はすべての単一のテーブルのために、私のようなクエリを実行したい、そして、特定の列名を含め、すべてのテーブルを実行し、特定の列

SELECT COLUMN_NAME, TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE '%myColumn%' 

を取得するには、このクエリを実行しますこの1つ:

自動的に実行し、最初のクエリのすべてのテーブルに2番目のクエリを実行する方法はありますか?

私は非常に大きなデータベースを持っており、myColumn上の特定のIDについて何かが格納されているかどうか確認したいと思います。この列は約200の表で使用されます。

答えて

1

私はこのために動的クエリを使用する必要があると思います。この中で、私はスキーマの結果をテーブル変数に保存してから、それらをループして必要なクエリを生成しました。以下を試してください:

DECLARE @Template varchar(max)='SELECT * FROM [TABLE_NAME] WHERE [COLUMN_NAME] = ''xxx'''; 
DECLARE @CMD varchar(max); 
DECLARE @id int=1, @TABLE_NAME varchar(255), @COLUMN_NAME varchar(255) 

declare @Table table(id int identity(1,1), COLUMN_NAME varchar(255), TABLE_NAME varchar(255)) 

    INSERT INTO @Table (TABLE_NAME, COLUMN_NAME) 
    SELECT TABLE_NAME, COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME LIKE '%Label%' 


    SELECT @id=ID, @TABLE_NAME = TABLE_NAME, @COLUMN_NAME = COLUMN_NAME FROM @Table WHERE ID = @id 
    While @@ROWCOUNT>0 BEGIN 
     SET @CMD = REPLACE(@Template, '[TABLE_NAME]', @TABLE_NAME) 
     SET @CMD = REPLACE(@CMD, '[COLUMN_NAME]', @COLUMN_NAME) 
     Print @cmd 
     EXEC (@CMD) 
     SELECT @id=ID, @TABLE_NAME = TABLE_NAME, @COLUMN_NAME = COLUMN_NAME FROM @Table WHERE ID = @id + 1 
    End 
0

これは次のように行うことができます。このスクリプトは、VARCHAR内のすべてのSELECT文を作成してから、動的に実行します。整数でもvarcharsでも動作します。


DECLARE @col_name SYSNAME='myColumn'; 
DECLARE @expected_value NVARCHAR(256)='xxx'; 
DECLARE @sel_stmts NVARCHAR(MAX) = (
    SELECT 
     ';SELECT '+ 
      '* '+ 
     'FROM '+ 
      QUOTENAME(t.TABLE_SCHEMA)+'.'+QUOTENAME(t.TABLE_NAME) + 
     'WHERE '+ 
      QUOTENAME(c.COLUMN_NAME)+'='''+REPLACE(@expected_value,'''','''''')+'''' 
    FROM 
     INFORMATION_SCHEMA.TABLES AS t 
     INNER JOIN INFORMATION_SCHEMA.COLUMNS AS c ON 
      c.TABLE_SCHEMA=t.TABLE_SCHEMA AND 
      c.TABLE_NAME=t.TABLE_NAME 
    WHERE 
     t.TABLE_TYPE='BASE TABLE' AND 
     c.COLUMN_NAME LIKE '%'[email protected]_name+'%' 
    FOR 
     XML PATH('') 
)+';'; 

--SELECT @sel_stmts; -- review 
EXEC sp_executesql @sel_stmts; -- execute it 
関連する問題