暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server 2016通过定义存储过程实现全库匹配字段内容搜索相关的表

巴韭特锁螺丝 2023-07-03
45

一、问题背景

    需要在SQL Server服务器中全库检索包含某个字段的所有表。

二、解决思路

    通过做一个存储过程,只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名。前提是要将这个存储过程放在所查询的数据库。

三、定义存储过程(函数)

    ALTER PROCEDURE [dbo].[SP_FindValueInDB]


    (


    @value VARCHAR(1024)


    )


    AS


    BEGIN


    -- 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 CURSOR


    FOR





    SELECT o.name, c.name


    FROM syscolumns c


    INNER JOIN sysobjects o ON c.id = o.id


    WHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239)


    ORDER BY o.name, c.name





    OPEN TABLES





    FETCH NEXT FROM TABLES


    INTO @table, @column





    WHILE @@FETCH_STATUS = 0


    BEGIN


    SET @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 TABLES


    INTO @table, @column


    END





    CLOSE TABLES


    DEALLOCATE TABLES





    SELECT *


    FROM #t





    DROP TABLE #t





    End

    四、执行全库检索

    EXEC SP_FindValueInDB 'admin'

    例如,要查询包含‘admin’的所有表,则新建查询输入。

      版权声明:本文内容始发于CSDN>作者:XMingRu,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
      本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。
      始发连接:https://blog.csdn.net/XMingRu/article/details/79541538
      在此特别鸣谢原作者的创作。
      此篇文章的所有版权归原作者所有,商业转载建议请联系原作者,非商业转载请注明出处。


      文章转载自巴韭特锁螺丝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论