• 查询服务器上所有SQL SERVER数据库中是否包含某个字段,且该字段是否包含某个值


    公司有一堆相同类别的客户,每个客户都部署了相同的一套系统,每套系统对应一个相同结构的数据库,昨天老板让查一下手机号码177xxxxx248是属于哪个客户的客户。

    我要查的这个号码来自于oa_member表中的phone字段,我需要对所有的数据库进行查询,看哪个数据库的oa_member表的phone字段有这个号码的记录。

    然而打开SQL SERVER Managerment Studio 一看,列出一大堆数据库。

    image-20240418095703646

    卧槽这五六十个数据库,难道要我每个数据库进行一次select?搞一次还好,如果后续动不动再弄个号码过来查一下,岂不是要疯了

    于是研究了下SQL语句,看看有什么解决防范,最终还是有所收获。

    目前服务器上不仅部署了不少那套系统,而且还有其他不一样的系统部署在服务器上,这样查询的时候需要先过滤掉其他系统的数据库,所以先检索下哪些数据库有oa_member表,通过下面语句就可以检索出来。

    DECLARE @DBName NVARCHAR(255)
    DECLARE @SQL NVARCHAR(MAX)
    
    DECLARE DatabaseCursor CURSOR FOR
    SELECT name FROM sys.databases WHERE state_desc = 'ONLINE' AND name NOT IN ('master', 'tempdb', 'model', 'msdb')
    
    OPEN DatabaseCursor
    FETCH NEXT FROM DatabaseCursor INTO @DBName
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @SQL = 'IF EXISTS (SELECT * FROM [' + @DBName + '].sys.tables WHERE name = ''oa_member'') BEGIN PRINT ''' + @DBName + ' '' END'
        EXEC sp_executesql @SQL
        FETCH NEXT FROM DatabaseCursor INTO @DBName
    END
    
    CLOSE DatabaseCursor
    DEALLOCATE DatabaseCursor
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    image-20240418100312787

    通过以上SQL语句可以检索出所有我需要的数据库,所以再加上那个号码作为过滤条件其实就能立马筛选出该号码是哪个数据库的了

    DECLARE @DBName NVARCHAR(255)
    DECLARE @SQL NVARCHAR(MAX)
    
    DECLARE @PhoneNumber NVARCHAR(20) = '177xxxxxxx248' -- 要查询的手机号码
    
    DECLARE DatabaseCursor CURSOR FOR
    SELECT name FROM sys.databases WHERE state_desc = 'ONLINE' AND name NOT IN ('master', 'tempdb', 'model', 'msdb')
    
    OPEN DatabaseCursor
    FETCH NEXT FROM DatabaseCursor INTO @DBName
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @SQL = 'IF EXISTS (SELECT * FROM [' + @DBName + '].sys.tables WHERE name = ''oa_member'' AND schema_id = SCHEMA_ID(''dbo'')) BEGIN IF EXISTS (SELECT * FROM [' + @DBName + '].dbo.oa_member WHERE phone = ''' + @PhoneNumber + ''') BEGIN PRINT ''' + @DBName + ' 有号码 ' + @PhoneNumber + ''' END END'
        EXEC sp_executesql @SQL
        FETCH NEXT FROM DatabaseCursor INTO @DBName
    END
    
    CLOSE DatabaseCursor
    DEALLOCATE DatabaseCursor
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    image-20240418100744830

    看到这里,就知道这个号码是属于哪个客户的了

    只需要进入ChangShuZhiTangBaoQinChanSi数据库对oa_member表进行查询的同时通过phone字段过滤,就能查到该号码对应的信息了

    use ChangShuZhiTangBaoQinChanSi
    go
    
    select * from oa_member where phone ='177xxxxx248'
    go
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240418101552668

    搞定

  • 相关阅读:
    TikTok生态圈【6.27跨境日报】TikTok夏季大甩卖利用现场活动中的游戏化
    C++基础知识1
    idea(2021版本)Springboot项目热部署
    K8S之prometheus-operator监控
    Express框架(入门教程-简介-安装-路由)
    团队协作利器----API接口Eolink
    java培训之数值格式化概述
    大模型系统和应用——自然语言处理&大模型基础
    如何寻找计算机领域的英文文献?
    深化产教融合,知了汇智助力高校数字化人才培养
  • 原文地址:https://blog.csdn.net/dante1987/article/details/137910556