-3

I want to search for a particular string in an SQL DB. I know the DB to search from but I don't know which table the search string is in.

cookiemonster
  • 368
  • 1
  • 8
  • 22
  • See the answer to this: https://stackoverflow.com/questions/23481973/selecting-column-names-that-have-specified-value/23482530#23482530 – pmbAustin Dec 11 '17 at 17:41
  • Possible duplicate of [Selecting column names that have specified value](https://stackoverflow.com/questions/23481973/selecting-column-names-that-have-specified-value) – DeanOC Dec 11 '17 at 17:47
  • 1
    Possible duplicate of : https://stackoverflow.com/questions/9185871/how-to-search-sql-server-database-for-string – omkaartg Dec 11 '17 at 17:50
  • 1
    Possible duplicate of [How to search sql server database for string?](https://stackoverflow.com/questions/9185871/how-to-search-sql-server-database-for-string) – Hadi Dec 11 '17 at 18:00

2 Answers2

0

you can do it by single query, its work for me to find any object which are in used and troubleshooting issues.

DECLARE @TOSEARCH NVARCHAR(50) = 'TO GET'

SELECT m.name, modify_date FROM ( SELECT DISTINCT so.name FROM syscomments sc INNER JOIN sysobjects so ON sc.id=so.id WHERE sc.TEXT LIKE '%'+@ToSearch+'%' ) m LEFT JOIN sys.objects ON sys.objects.name = m.name ORDER BY modify_date DESC

-1

See if code below can help you. This code i get in this site. I didn't try out, but i knew one that tried out and said me worked.

DECLARE @SQL VARCHAR(8000)
DECLARE @filtro VARCHAR(200)
DECLARE @filtro_www VARCHAR(200)

-- start sql declaration
SET @SQL = ''
SET @filtro = '%text_searched%'

SELECT
   tabelas.name   AS Tabela 
  ,colunas.name   AS Coluna
  ,tipos.name     AS Tipo
  ,colunas.length AS Tamanho
INTO
  #result
FROM 
  sysobjects tabelas
  INNER JOIN syscolumns colunas
  ON colunas.id = tabelas.id
  --
  INNER JOIN systypes tipos
  ON tipos.xtype = colunas.xtype
WHERE 
  tabelas.xtype = 'u'
    AND
  -- put here the type of column that will be search
  tipos.name IN('text', 'ntext', 'varchar', 'nvarchar')


-- cursor to search into table
DECLARE cTabelas cursor LOCAL fast_forward FOR
SELECT DISTINCT Tabela FROM #result

DECLARE @nomeTabela VARCHAR(255)

OPEN cTabelas

fetch NEXT FROM cTabelas INTO @nomeTabela

while @@fetch_status = 0
BEGIN

  -- cursor to search for all columns in the current table
  DECLARE cColunas cursor LOCAL fast_forward FOR
  SELECT Coluna, Tipo, Tamanho FROM #result WHERE Tabela = @nomeTabela

  DECLARE @nomeColuna VARCHAR(255)
  DECLARE @tipoColuna VARCHAR(255)
  DECLARE @tamanhoColuna VARCHAR(255)

  OPEN cColunas

  -- mount the columns from select statement
  fetch NEXT FROM cColunas INTO @nomeColuna, @tipoColuna, @tamanhoColuna

  while @@fetch_status = 0
  BEGIN
    -- declare variable
    SET @SQL = 'declare @hasresults bit' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10)
    -- cria o select
    SET @SQL = @SQL + 'select' + CHAR(13) + CHAR(10)
    SET @SQL = @SQL + CHAR(9) + '''' + @nomeTabela + ''' AS NomeTabela'
    SET @SQL = @SQL + CHAR(9) + ',' + @nomeColuna + CHAR(13) + CHAR(10)
    -- add a column with type and size
    SET @SQL = @SQL  + CHAR(9) + ',' + '''' + @tipoColuna + ''' AS ''' + @nomeColuna + '_Tipo''' + CHAR(13) + CHAR(10)
    SET @SQL = @SQL  + CHAR(9) + ',' + 'DATALENGTH(' + @nomeColuna + ') AS ''' + @nomeColuna + '_Tamanho_Ocupado''' + CHAR(13) + CHAR(10)    
    SET @SQL = @SQL  + CHAR(9) + ',' + '''' + @tamanhoColuna + ''' AS ''' + @nomeColuna + '_Tamanho_Maximo''' + CHAR(13) + CHAR(10)

    -- define temporary table(#result)
    SET @SQL = @SQL + 'into' + CHAR(13) + CHAR(10) + CHAR(9) + '#result_' + @nomeTabela + CHAR(13) + CHAR(10)
    -- add the from statement
    SET @SQL = @SQL +  'from' + CHAR(13) + CHAR(10) + CHAR(9) + @nomeTabela + CHAR(13) + CHAR(10)
    -- start assembly of the clause where
    SET @SQL = @SQL + 'where' + CHAR(13) + CHAR(10)
    SET @SQL = @SQL + CHAR(9) + @nomeColuna + ' like ''' + @filtro + '''' + CHAR(13) + CHAR(10)

    SET @SQL = @SQL + CHAR(13) + CHAR(10) + 'select @hasresults = count(*) from #result_' + @nomeTabela + CHAR(13) + CHAR(10)
    SET @SQL = @SQL + CHAR(13) + CHAR(10) + 'if @hasresults > 0'
    SET @SQL = @SQL + CHAR(13) + CHAR(10) + 'begin'
    SET @SQL = @SQL + CHAR(13) + CHAR(10) + CHAR(9) + 'select * from #result_' + @nomeTabela
    SET @SQL = @SQL + CHAR(13) + CHAR(10) + 'end' + CHAR(13) + CHAR(10)
    SET @SQL = @SQL + CHAR(13) + CHAR(10) + 'drop table #result_' + @nomeTabela
    SET @SQL = @SQL + CHAR(13) + CHAR(10)

    fetch NEXT FROM cColunas INTO @nomeColuna, @tipoColuna, @tamanhoColuna
    -- uncomment the line below to see Sql generated into window messages
    -- print @sql
    EXEC(@SQL)
    SET @SQL = ''
  END

  close cColunas
  deallocate cColunas

  fetch NEXT FROM cTabelas INTO @nomeTabela
END

close cTabelas
deallocate cTabelas

DROP TABLE #result

There are some names in portuguese, but are name only, then you can replace. Are only name.

pnet
  • 258
  • 1
  • 17