How to find a string inside a entire database?

前端 未结 9 1347
一整个雨季
一整个雨季 2020-12-13 06:04

I have one specific string, such as \"123abcd\" for example but I don\'t know the name of the table or even the name of the column inside the table on my SQL Server Database

9条回答
  •  情深已故
    2020-12-13 06:37

    create procedure usp_find_string(@string as varchar(1000))
    as
    begin
    declare @mincounter as int
    declare @maxcounter as int
    declare @stmtquery as varchar(1000)
    set @stmtquery=''
    create table #tmp(tablename varchar(128),columnname varchar(128),rowid int identity)
    create table #tablelist(tablename varchar(128),columnname varchar(128))
    declare @tmp table(name varchar(128))
    declare @tablename as varchar(128)
    declare @columnname as varchar(128)
    
    insert into #tmp(tablename,columnname)
    select a.name,b.name as columnname from sysobjects a
    inner join syscolumns b on a.name=object_name(b.id)
    where a.type='u'
    and b.xtype in(select xtype from systypes
        where name='text' or name='ntext' or name='varchar' or name='nvarchar' or name='char' or name='nchar')
    order by a.name
    
    select @maxcounter=max(rowid),@mincounter=min(rowid) from #tmp 
    while(@mincounter <= @maxcounter )
    begin
     select @tablename=tablename, @columnname=columnname from #tmp where rowid=@mincounter
     set @stmtquery ='select top 1  ' + '[' +@columnname+']' + ' from ' + '['+@tablename+']' + ' where ' + '['+@columnname+']' + ' like ' + '''%' + @string + '%'''
     insert into @tmp(name) exec(@stmtquery)
     if @@rowcount >0
     insert into #tablelist values(@tablename,@columnname)
     set @mincounter=@mincounter +1
    end
    select * from #tablelist
    end
    

提交回复
热议问题