SQL选择表/列表表

时间:2013-10-21 09:38:32

标签: sql sql-server

我想请求帮助。

由于我有500多个表,我需要搜索那些具有相似单词的表格列。是否可以搜索并列出这些表格?

E.g

表1 - 姓名,年龄,身高

表2 - 结果,姓名,分数

表3 - 名称,Pic,Parent1,Parent2

我想进行查询以选择任何列包含单词“%Name%”的所有表,这可能吗?

1 个答案:

答案 0 :(得分: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

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