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'


本文转载:CSDN博客