2013-08-17 40 views
0

對於一個例子,我有我的DB 100個表(表1,表2,表3,表4和表5 .....),表1與coloumns COL1,COL2 ... COL7像明智的每個表都有一些列。列COL7有值「大膽」。在這裏,我想找回持有「BOLD」值的表。如何取回一組保持一定值表名稱?

+0

你可以試試[這](http://www.mssqltips.com/sqlservertip/1522/searching-and-finding-a-string-value-in-all-columns-in-a-sql-server-表/)。 – Nilesh

回答

0

也許這question有你在找什麼。從接受的答案採取

腳本:

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 
0

根據菲利普的回答,您可以使用生成的進行選擇,並在一個週期內執行他們:

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來評估是否有包含給定文本('BOLD')的任何行。