• 0
Sign in to follow this  
jothaz

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

Question

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.

Edited by jothaz

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 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"

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this