我想寻求帮助。
因为我有 500 多个表,我需要搜索这些表的列有一些相似的词。是否可以搜索和列出这些表?
例如
表 1 - 姓名、年龄、身高
表 2 - 结果、姓名、分数
表 3 - 姓名、图片、Parent1、Parent2
我想做一个查询来选择任何列中包含单词“%Name%”的所有表,这可能吗?
我想寻求帮助。
因为我有 500 多个表,我需要搜索这些表的列有一些相似的词。是否可以搜索和列出这些表?
例如
表 1 - 姓名、年龄、身高
表 2 - 结果、姓名、分数
表 3 - 姓名、图片、Parent1、Parent2
我想做一个查询来选择任何列中包含单词“%Name%”的所有表,这可能吗?
只需在您的数据库中运行以下查询并将您的搜索字符串替换为字符串即可。
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