简易的全库搜索特定字符串的语句

guguda2008 2014-11-27 12:08:22
加精
客户扔过来一个OA库要我自己找合同和附件表,没文档,表名乱起的。

手头只有前台登陆方式,于是拉了几个合同编号和附件名称,用来作为搜索的条件。

没存全库搜索的脚本,现写了一个简单的语句,实现查找符合以下条件的表:
1.某char/nchar/varchar/nvarchar类型的列存储的值为指定字符串
2.只有一行符合此条件

语句输出符合条件的表名,然后自己再分析。

这样用唯一标识来找表就比较方便了。

语句如下:
if OBJECT_ID('fun_mu') is not null drop function fun_mu
go
create function fun_mu(@tb varchar(100),@text varchar(8000))
returns varchar(max)
as
begin
declare @sql varchar(max)
select @sql=ISNULL(@sql+' or ','union all select '''+OBJECT_NAME(object_id)+''' from '+OBJECT_NAME(object_id)+' where 1=1 and ')+t1.name+' = '''+@text+''''
from sys.columns t1
inner join sys.types t2 on t1.system_type_id=t2.system_type_id
where OBJECT_NAME(object_id)=@tb and (t2.name like '%char')

return @sql+' having count(1)=1'
end

go

declare @sql varchar(max)
select @sql=isnull(@sql+'
','')+dbo.fun_mu(name,'20141024165032914')
from sys.tables t1
inner join sys.partitions t2 on t1.object_id=t2.object_id and t2.index_id in (0,1) and t2.rows>0

--print stuff(@sql,1,10,'')
exec stuff(@sql,1,10,'')
...全文
1853 2 收藏 26
写回复
26 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
twtiqfn 2014-12-08
真的有那么简单吗
回复
回复
javadaddy 2014-12-03
学习了这么好的东西
回复
wShineboy 2014-12-02
到此一游,说了就走。
回复
JAYGEYAJUN 2014-12-01
感谢分享!
回复
mr_wangb 2014-12-01
高端、大气!
回复
reenjie 2014-12-01
回复
回复
guguda2008 2014-11-30
引用 2 楼 ap0405140 的回复:
感谢分享, 请问为何不用SQL Profiler工具跟踪得到表名呢?
因为没有机器能边上客户的服务器
回复
hugh_z 2014-11-29
learning
回复
qq_24020507 2014-11-29
谢谢分享11111111
回复
GW786228836 2014-11-29
回复
cattpon 2014-11-29
感谢分享~~
回复
Neo_whl 2014-11-29
mark接分
回复
ttl679ttl 2014-11-28
回复
nettman 2014-11-28
感谢楼主分享,收藏下
回复
syrchina 2014-11-28
回复
hugh_z 2014-11-28
learning
回复
GW786228836 2014-11-28
回复
laoer_2002 2014-11-28
谢谢楼主分享
回复
加载更多回复
相关推荐
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2014-11-27 12:08
社区公告
暂无公告