在当前账户下模糊查询是否有匹配的表以及定位字段是否存在、在哪个表中
Declare @db varchar(100) Declare @dbID int =4 Declare @tabName varchar(100)='mask' Declare @columnName varchar(100) = '' Declare @FixDB varchar(100)='ProductDB' --在所有的库中找一张表 while 1=1 Begin Select Top 1 @db=name,@dbID=database_id From Sys.databases where database_id>@dbID Order by database_id asc --如果指定搜索的数据库,则跳过所有非指定数据库 If (@FixDB<>@db And LEN(@FixDB)>2) Continue Begin try if(LEN(@tabName)>0) exec ( 'If Exists( Select '''+@db+''',* From '+@db+'.sys.tables(Nolock) where name like ''%'+@tabName+'%'' ) Select '''+@db+''' DBName,* From '+@db+'.sys.tables(Nolock) where name like ''%'+@tabName+'%'' ') if(LEN(@columnName)>0) exec ( 'If Exists( Select C.name,O.name From '+@db+'.sys.columns(Nolock) C Inner Join '+@db+'.sys.objects O on C.object_id=O.object_id where C.name like ''%'+@columnName+'%'') Select '''+@db+''' DBName,O.name TableName,C.name ColumName From '+@db+'.sys.columns(Nolock) C Inner Join '+@db+'.sys.objects O on C.object_id=O.object_id where C.name like ''%'+@columnName+'%'' ' ) End try Begin catch Print @db End catch If (@FixDB=@db And LEN(@FixDB)>2)--如果当前是指定的数据库,说明已经运行结束,跳出循环。 Break IF((Select max(database_id) From Sys.databases )=@dbID) --如果当前运行结束的数据库是最后一个,则说明运行结束,退出循环 break End
posted on 2015-03-03 16:37 Anthony.Zhao 阅读(312) 评论(0) 编辑 收藏 举报