1

我想寻求帮助。

因为我有 500 多个表,我需要搜索这些表的列有一些相似的词。是否可以搜索和列出这些表?

例如

表 1 - 姓名、年龄、身高

表 2 - 结果、姓名、分数

表 3 - 姓名、图片、Parent1、Parent2

我想做一个查询来选择任何列中包含单词“%Name%”的所有表,这可能吗?

4

1 回答 1

1

只需在您的数据库中运行以下查询并将您的搜索字符串替换为字符串即可。

用于从数据库中的所有列和表中查找特定单词/值的 SQL

DECLARE @SQL VARCHAR(MAX)
DECLARE @valueToFind VARCHAR(1000)
DECLARE @columnName VARCHAR(1000)

SET @valueToFind = 'string' 
SET @columnName = '%%' 

CREATE TABLE #TMP 
   (Clmn VARCHAR(500), 
   CNT INT) 

SELECT @SQL=COALESCE(@SQL,'')+CAST('INSERT INTO #TMP Select ''' + TABLE_SCHEMA + '.' + TABLE_NAME + '.' + COLUMN_NAME + ''' AS Clmn, count(*) CNT FROM '  
        + TABLE_SCHEMA + '.[' + TABLE_NAME + 
       '] WHERE [' + COLUMN_NAME + '] LIKE ''%' + @valueToFind + '%'' ;'  AS VARCHAR(8000)) 
FROM INFORMATION_SCHEMA.COLUMNS  
   JOIN sysobjects B  
   ON INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = B.NAME 
WHERE COLUMN_NAME LIKE @columnName AND xtype = 'U' 
   AND DATA_TYPE IN ('char','nchar','ntext','nvarchar','text','varchar') 

--PRINT (@SQL) 

EXEC(@SQL) 

SELECT * FROM #TMP WHERE CNT > 0 
DROP TABLE #TMP

-------------------------------------------------- --------------------------------------

于 2013-10-21T09:50:09.803 回答