隻需要傳入一個想要查找的值,即可查詢出這個值所在的表和字段名。
create procedure [dbo].[sp_findvalueindb]
(
@value varchar(1024)
)
as
begin
-- set nocount on added to prevent extra result sets from
-- interfering with select statements.
set nocount on;
declare @sql varchar(1024)
declare @table varchar(64)
declare @column varchar(64)
create table #t (
tablename varchar(64),
columnname varchar(64)
declare tables cursor
for
select o.name, c.name
from syscolumns c
inner join sysobjects o on c.id = o.id
where o.type = 'u' and c.xtype in (167, 175, 231, 239)
order by o.name, c.name
open tables
fetch next from tables
into @table, @column
while @@fetch_status = 0
set @sql = 'if exists(select null from [' + @table + '] '
set @sql = @sql + 'where rtrim(ltrim([' + @column + '])) like ''%' + @value + '%'') '
set @sql = @sql + 'insert into #t values (''' + @table + ''', '''
set @sql = @sql + @column + ''')'
exec(@sql)
end
close tables
deallocate tables
select *
from #t
drop table #t
例如,要查詢值'bbq chic sw',結果如下:
傳回三條記錄,說明這個值存在于三個表中,分别為_dts_menudef, g_dts_menudef和g_recipe中,字段名分别為name1, name1, name
最新内容請見作者的github頁:http://qaseven.github.io/