sql 遍历所有表中 某项 值为已知数的查询语句

本文提供了一种SQL方法,用于在数据库的所有表中搜索含有特定字符串的记录,并仅返回所在表名。通过定义存储过程,该方法实现了遍历所有表及字段的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sql 遍历所有表中 某项 值为已知数的查询语句

2008-3-18 10:13
提问者: 风之辟尘 | 浏览次数:1972次
比如,我想找到,数据库中值为123的所在表

问题补充:

二楼的兄弟
如果是包含123的值呢?
比如45123,12345
而且返回的不是所在表名,是字段名
我试过了,可能我没说清楚,我要的是所在表名
_____________________________
我又试了一遍,确实是经典,只要能返回表名就好了。
我来帮他解答
2008-3-21 14:26
满意回答
即然经典,那就多加分啦,只要输出表名:
===============================
ALTER proc Full_Search(@string varchar(50)) 
as 
begin 

declare @tbname varchar(50) 
declare tbroy cursor for select name from sysobjects 
where xtype= 'u ' --第一个游标遍历所有的表 

open tbroy 
fetch next from tbroy into @tbname 
while @@fetch_status=0 
begin 

declare @colname varchar(50) 
declare colroy cursor for select name from syscolumns 
where id=object_id(@tbname) and xtype in ( 
select xtype from systypes 
where name in ( 'varchar ', 'nvarchar ', 'char ', 'nchar ') --数据类型为字符型的字段 
) --第二个游标是第一个游标的嵌套游标,遍历某个表的所有字段 

open colroy 
fetch next from colroy into @colname 
while @@fetch_status=0 
begin 

declare @sql nvarchar(1000),@j int 
select @sql= 'select @i=count(1) from ' +@tbname + ' where '+ @colname+ ' like '+ '''%'+@string+ '%''' 
exec sp_executesql @sql,N'@i int output',@i=@j output --输出满足条件表的记录数 
if @j> 0 
BEGIN
select 包含字串的表名=@tbname
--exec( 'select distinct '+@colname+' from ' +@tbname + ' where '+ @colname+ ' like '+ '''%'+@string+ '%''') 
END
fetch next from colroy into @colname 
end 

close colroy 
deallocate colroy 

fetch next from tbroy into @tbname 
end 
close tbroy 
deallocate tbroy 
end 
go 

exec Full_Search '123'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值