一、问题背景
需要在SQL Server服务器中全库检索包含某个字段的所有表。
二、解决思路
通过做一个存储过程,只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名。前提是要将这个存储过程放在所查询的数据库。
三、定义存储过程(函数)
ALTER PROCEDURE [dbo].[SP_FindValueInDB](@value VARCHAR(1024))ASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON;DECLARE @sql VARCHAR(1024)DECLARE @table VARCHAR(64)DECLARE @column VARCHAR(64)CREATE TABLE #t (tablename VARCHAR(64),columnname VARCHAR(64))DECLARE TABLES CURSORFORSELECT o.name, c.nameFROM syscolumns cINNER JOIN sysobjects o ON c.id = o.idWHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239)ORDER BY o.name, c.nameOPEN TABLESFETCH NEXT FROM TABLESINTO @table, @columnWHILE @@FETCH_STATUS = 0BEGINSET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] 'SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') 'SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', '''SET @sql = @sql + @column + ''')'EXEC(@sql)FETCH NEXT FROM TABLESINTO @table, @columnENDCLOSE TABLESDEALLOCATE TABLESSELECT *FROM #tDROP TABLE #tEnd
四、执行全库检索
EXEC SP_FindValueInDB 'admin'
例如,要查询包含‘admin’的所有表,则新建查询输入。
版权声明:本文内容始发于CSDN>作者:XMingRu,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。始发连接:https://blog.csdn.net/XMingRu/article/details/79541538在此特别鸣谢原作者的创作。此篇文章的所有版权归原作者所有,商业转载建议请联系原作者,非商业转载请注明出处。
