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

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

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

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

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

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

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

sql 复制代码
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

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

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

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

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

sql 复制代码
use ChangShuZhiTangBaoQinChanSi
go

select * from oa_member where phone ='177xxxxx248'
go

搞定

相关推荐
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
这个DBA有点耶5 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G5 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备5 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远5 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
2601_962218615 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
-梅5 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog5 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
张洛闻Eren5 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安5 天前
MySQL-触发器
数据库·mysql