2011-12-09 4 views
3

私の目的は、特定の値を持つ特定の列を持つデータベースからすべてのテーブルを見つけることです。 すなわち 私は、テーブルのいくつかは、列名を持つ「名前ID」などの表1、表2、表3、表4、表5、表6、表7これらの表に特定の値を持つ列を含むすべてのテーブルを検索するにはどうすればよいですか?

のようなテーブルを持っています。今度は、カラム名が 'NameID'で値が100であるテーブルを探したいと思います。

SQLクエリを書く方法を教えてください。

答えて

0

テーブルを一覧表示できない場合は、クエリで実行することはできません。あなたは動的にクエリを作成する必要があります(Paul Alan Taylorが示したようなテーブルを使用して)。

これを適応してみてください。

http://ubercode.bleakllc.com/2008/11/find-any-value-in-any-database-column.html

すでに列を持っているすべてのテーブルを知っている、とテーブルのリストは変更されていない場合、あなたは

のような単純なクエリを行うことができます
Select 'Table1' from table1 where id = 100 
    UNION 
    Select 'Table2' from table2 where id = 100 
    UNION 
    ... 

UNIONはすべての二重引用符を捨てるので、複数の行が100のIDを持つ場合、UNION ALLを必要としない場合は1回だけ表を表示します。

+0

の値を持つカラムの名前ID」を持つテーブルたいですあなたがしたいかもしれないテーブル名だけを必要としますテーブル1からトップ1 'テーブル1'を選択します。ここではid = 100ユニオン... –

1

もちろん、INFORMATION_SCHEMAを使用すると、MS SQLで自己記述することができます。

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'NameID' 
+1

屋が真のthatsしかし、私はあなたの場合は100 –

0

似たようなことが必要でしたが、私たちにとってはTransactionIDでした。私はPaul Alan Taylor氏とMakeMinePanacea氏の提案を受け取り、カーソルを追加しました。それは素早く汚れていますが、1分間働きます。

DECLARE @TableName varchar(MAX) 
DECLARE @Sql VARCHAR(MAX) 
set @Sql = '' 
DECLARE @Tables CURSOR 

SET @Tables = CURSOR FOR 

    SELECT t.Table_Name 
    FROM INFORMATION_SCHEMA.COLUMNS c 
    JOIN INFORMATION_SCHEMA.TABLES t on c.Table_Name = t.Table_Name 
    WHERE COLUMN_NAME = 'TransactionID' and table_type = 'BASE TABLE' 

OPEN @Tables 
FETCH NEXT 
FROM @Tables INTO @TableName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    if len(@Sql) > 0 
    BEGIN 
     set @SQL = @SQL + ' UNION ALL ' 
    END 

    set @Sql = @Sql + 'SELECT ''' + @TableName + ''' FROM [' + @TableName + '] WHERE transactionid = 100' 

    FETCH NEXT 
    FROM @Tables INTO @TableName 
END 
CLOSE @Tables 
DEALLOCATE @Tables 

exec (@Sql) 
0

次のパラメータを使用して、私の検索スクリプトを使用することができます。

SET @SearchStrColumnValue = '100' /* use LIKE syntax */ 
SET @FullRowResult = 1 
SET @SearchStrTableName = 'TABLE%' /* NULL for all tables, uses LIKE syntax */ 
SET @SearchStrColumnName = 'NameID' /* NULL for all columns, uses LIKE syntax */ 
SET @SearchStrInXML = 0 /* Searching XML data may be slow */ 

http://fullparam.wordpress.com/2012/09/07/fck-it-i-am-going-to-search-all-tables-all-collumns/

関連する問題