Ir para conteúdo
Fórum Script Brasil
  • 0

Pesquisa/lista Sp´s Que Tenha No Texto Caracteres Passados


jothaz

Pergunta

Camaradas,

Segue o código de uma sp para pesquisar caracteres no texto de todas sp´s do banco de dados:

ALTER PROC PESQUISA_TEXTO_PROC
    @TEXTO_PROCURADO VARCHAR(50)
AS

    DECLARE @NOME_PROC AS VARCHAR(100), @TEXTO_PROC AS VARCHAR(8000)

    DECLARE MYCURSOR CURSOR FOR
    --
    --Seleciona todas as stored procedures do banco de dados
    --efetua JOIN com SYSCOMMENTS para recuperar texto sp
    SELECT     OBJ.NAME, TEXT
    FROM     SYSOBJECTS OBJ
            INNER JOIN SYSCOMMENTS COM
            ON OBJ.ID = COM.ID
    WHERE TYPE = 'P'

    OPEN MYCURSOR
    FETCH NEXT FROM MYCURSOR
    INTO @NOME_PROC,@TEXTO_PROC

    WHILE @@F ETCH_STATUS = 0
    BEGIN
        --
        --Verifica se parâmetro @TEXTO_PROCURADO existe no texto da sp
        IF CHARINDEX(@TEXTO_PROCURADO,@TEXTO_PROC) > 0
        BEGIN
            PRINT @NOME_PROC
        END
   
        FETCH NEXT FROM MYCURSOR
        INTO @NOME_PROC,@TEXTO_PROC
    END

CLOSE MYCURSOR
DEALLOCATE MYCURSOR
GO

Considerações:

  1. Neste exemplo varremos o banco de dados filtrando as stored procedures e pesquisamos no conteúdo do texto das mesma uma sequência de caracteres passada como parâmetro.
  2. Para obtermos o conteúdo do texto da strore procedure efetuamos um JOIN entre as tabelas de sistema: SYSOBJECTS (onde localiza-se o nome e id dos objetos) e SYSCOMMENTS (onde localiza-se o conteúdo do texto da sp). Depois pesquisamos o texto passado como parâmetro no compo de nome TEXT tabela SYSCOMMENTS.
  3. Talvez o exemplo não tenha muitas aplicações práticas mas pode ser adaptado e melhorado de acordo com a necessidade de cada um
Fonte/Autor/link

AUTOR: "Jothaz"

Dúvidas, criticas, contribuições, correções e adições serão bem vindas.

Editado por jothaz
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Guest --Lucio --

Não precisa tanto:

select OBJ.name from sysobjects OBJ inner join syscomments COM on OBJ.ID = COM.ID

where COM.text like '%seu_texto%'

Lembrando que só é possível achar o texto caso a procedure não tenha sido compilada com "with encryptation"

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...