2012-02-11 44 views
-4

我有一個包含100個表的數據庫。 我怎麼知道哪個表包含特定的文本。哪個表包含此數據+ SQL

例如該表中包含文本「假定壽命聲明」

我可以給一個暗示,這是申請一個varchar

SQL SERVER 2008

+1

SQL-Server,MySQL,Postgres,Oracle,SQLite,...?哪個DBMS? – 2012-02-11 17:07:57

+0

我知道關於mssql中的CONTAINSTABLE可能是其他全文搜索功能在其他數據庫 – 2012-02-11 17:08:23

+0

一次或通常? – danihp 2012-02-11 17:10:10

回答

0

ypercube的建議是完全正確的。這裏是一個實現:

DECLARE @searchText VARCHAR(100) 
SET @searchText = 'Assumed Life Claims' 

DECLARE @sqlText VARCHAR(8000) 
DECLARE @MaxId INT 
DECLARE @CurId INT 
DECLARE @possibleColumns TABLE (Id INT IDENTITY(1, 1) NOT NULL PRIMARY KEY 
           ,sqlText VARCHAR(8000)) 
INSERT INTO @possibleColumns(sqlText) 
SELECT 'IF EXISTS (SELECT * FROM ' + c.TABLE_NAME + ' WHERE ' + c.COLUMN_NAME + ' = ''' + @searchText + ''') PRINT '' searchText=' + @searchText + ' was found in ' + c.TABLE_NAME + '.' + c.COLUMN_NAME + '''' 
    FROM INFORMATION_SCHEMA.COLUMNS c 
    -- Using hint that this field is a varchar 
WHERE c.DATA_TYPE = 'varchar' 

SELECT @CurId = MIN(pc.Id) 
     ,@MaxId = MAX(pc.Id) 
    FROM @possibleColumns pc 

WHILE (@CurId <= @MaxId) 
BEGIN 
    SELECT @sqlText = pc.sqlText 
     FROM @possibleColumns pc 
    WHERE pc.Id = @CurId 

    -- For testing (uncomment) 
    --PRINT @sqlText 

    EXEC(@sqlText) 

    -- Increment counter 
    SET @CurId = @CurId + 1 
END 
+0

這給出了一些錯誤 – 2012-02-11 17:47:10

+0

謝謝..... http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm謝謝大家 – 2012-02-11 18:02:49

+0

我從http://beyondrelational.com/blogs獲得了此鏈接/naomi/archive/2010/10/29/how-to-search-a-string-value-in-all-columns-in-the-table-and-in-all-tables-in-the-database.aspx – 2012-02-11 18:04:46