jun 28 2008

Pesquise por uma string em todos os campos de uma tabela SQL Server

  • Autor: admin em Programação
  • Sem Comentários. Seja o primeiro a comentar.
As vezes necessitamos, pesquisar por uma string eventualmente em todas as colunas de uma tabela. Para isso podemos utilizar uma procedure como essa:

CREATE PROCEDURE sp_FindStringInTable @stringToFind VARCHAR(100), @schema sysname, @table sysname
AS

DECLARE @sqlCommand VARCHAR(8000)
DECLARE @where VARCHAR(8000)
DECLARE @columnName sysname
DECLARE @cursor VARCHAR(8000)

BEGIN TRY
SET @sqlCommand = ‘SELECT * FROM ‘ + @schema + ‘.’ + @table + ‘ WHERE’
SET @where = ”

SET @cursor = ‘DECLARE col_cursor CURSOR FOR SELECT COLUMN_NAME
FROM ‘ + DB_NAME() + ‘.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ”’ + @schema + ”’
AND TABLE_NAME = ”’ + @table + ”’
AND DATA_TYPE IN (”char”,”nchar”,”ntext”,”nvarchar”,”text”,”varchar”)’

EXEC (@cursor)

OPEN col_cursor
FETCH NEXT FROM col_cursor INTO @columnName

WHILE @@FETCH_STATUS = 0
BEGIN
IF @where <> ”
SET @where = @where + ‘ OR’

SET @where = @where + ‘ ‘ + @columnName + ‘ LIKE ”’ + @stringToFind + ””
FETCH NEXT FROM col_cursor INTO @columnName
END

CLOSE col_cursor
DEALLOCATE col_cursor

SET @sqlCommand = @sqlCommand + @where
–PRINT @sqlCommand
EXEC (@sqlCommand)
END TRY
BEGIN CATCH
PRINT ‘Existe um erro’
IF CURSOR_STATUS(‘variable’, ‘col_cursor’) <> -3
BEGIN
CLOSE col_cursor
DEALLOCATE col_cursor
END
END CATCH

A procedure usa um select em tabela de sistema para recuperar o nome das colunas da tabela que é recebida como um parâmetro.

É aberto um cursor com a lista de colunas da tabela recebida como parâmetro.

Um laço no cursor monta uma cláusula where para pesquisar em todas as colunas da tabela.

O where e a instrução SQL são unidos e finalmente são executados.



DEIXE UM COMENTÁRIO

Subscrever

Subscreve o Blog



Publicidade

Comentários Recentes

  • shirley Balazs: Parabéns!! Informações de utilidade publica e de primeira, foi muito útil a mim.Obrigada!!
  • Jefferson Ferreira de brito: eu quero muito
  • thiago valente: Eu quero um para mim
  • Lucas martins balieiro: Eu não fiz o enem mesmo assim eu posso me inscrever no site essa é minha dúvida, só queme...
  • Francisca Marli Oliveira: quero saber quanto tenho no meu fgts

Links

Leitores Recentes

VALE O CLIQUE!

Site Seguro Ocioso

Divulgue o blog Infomaroto em seu site e tenha seu link ou banner aqui.
Blog Infomaroto