0

たとえば、DB に 100 個のテーブル (table1、table2、table3、table4、および table5 .....) があり、table1 には列 col1、col2...col7 があり、すべてのテーブルにはいくつかの列があります。列 col7 の値は「BOLD」です。ここでは、値「BOLD」を保持するテーブルを取得したいと考えています。

4

2 に答える 2

0

おそらく、この質問にはあなたが探しているものが含まれています。

受け入れられた回答から取られたスクリプト:

SELECT 'SELECT * FROM [' + tables.TABLE_NAME + '] WHERE ['
       + Columns.Column_Name + '] = ' + CONVERT(varchar(50),@COLUMNVALUE)
FROM INFORMATION_SCHEMA.Columns as Columns
INNER JOIN INFORMATION_SCHEMA.TABLES as tables 
    On Columns.TABLE_NAME = tables.TABLE_NAME
WHERE Columns.DATA_TYPE = @COLUMNTYPE
于 2013-08-17T00:48:01.780 に答える
0

Felipe の回答に基づいて、生成された SELECT を使用し、サイクルで実行できます。

SELECT 'SELECT TOP 1 1 FROM [' + tables.TABLE_NAME + '] WHERE [' + Columns.Column_Name + '] LIKE ''%' + CONVERT(varchar(50),'BOLD') + '%''' As Qry, 
    IDENTITY(int,1,1) As Id,
    tables.TABLE_NAME As TableName,
    Cast(null As Bit) As ContainsText
INTO #Queries
FROM INFORMATION_SCHEMA.Columns as Columns
INNER JOIN INFORMATION_SCHEMA.TABLES as tables 
    On Columns.TABLE_NAME = tables.TABLE_NAME
WHERE Columns.DATA_TYPE in ('varchar','nvarchar','text')

DECLARE @TableName NVARCHAR(MAX), @Qry NVARCHAR(MAX), @ContainsText BIT, @id INT
WHILE EXISTS (SELECT * FROM #Queries WHERE ContainsText IS NULL)
BEGIN
    SELECT TOP 1 @id = id, @TableName = TableName, @Qry = Qry FROM #Queries WHERE ContainsText IS NULL
    EXEC (@Qry)
    If (@@ROWCOUNT > 0)
        Set @ContainsText = 1
    Else
        Set @ContainsText = 0
    UPDATE #Queries SET ContainsText = @ContainsText WHERE id = @id
END

SELECT * FROM #Queries Where ContainsText = 1

このスクリプトは、テキスト型 (nvarchar、varchar、または text) の列を含むすべてのテーブルを取得し、SELECT を 1 つずつ実行して、指定されたテキスト ('BOLD') を含む行があるかどうかを評価します。

于 2013-08-17T03:20:35.047 に答える