Quero pesquisar um texto de todos os meus procedimentos armazenados no banco de dados. Eu uso o SQL abaixo:
SELECT DISTINCT
o.name AS Object_Name,
o.type_desc
FROM sys.sql_modules m
INNER JOIN
sys.objects o
ON m.object_id = o.object_id
WHERE m.definition Like '%[ABD]%';
Quero pesquisar [ABD]
em todos os procedimentos armazenados, incluindo colchetes, mas não está dando o resultado adequado. Como posso alterar minha consulta para conseguir isso?
sql
sql-server
stored-procedures
DharaPPatel
fonte
fonte
SCHEMA_NAME(o.schema_id) AS Schema_Name
à cláusula select.Tente este pedido:
Inquerir
fonte
Você já tentou usar algumas das ferramentas de terceiros para fazer a pesquisa? Existem vários disponíveis por aí que são gratuitos e que me salvaram uma tonelada de tempo no passado.
Abaixo estão dois suplementos do SSMS que usei com bom sucesso.
Pesquisa ApexSQL - Pesquisa o esquema e os dados nos bancos de dados e possui recursos adicionais, como rastreamento de dependências e mais…
Pacote de ferramentas SSMS - possui a mesma funcionalidade de pesquisa que a anterior e vários outros recursos interessantes. Não é gratuito para o SQL Server 2012, mas ainda é muito acessível.
Eu sei que esta resposta não está 100% relacionada às perguntas (que eram mais específicas), mas espero que outras pessoas achem isso útil.
fonte
Eu costumo executar o seguinte para conseguir isso:
fonte
Boas práticas para trabalhar com o SQL Server.
Crie o procedimento armazenado abaixo e defina a tecla de atalho,
Agora - defina a tecla de atalho como abaixo,
Da próxima vez, sempre que você quiser encontrar um texto específico em qualquer um dos quatro objetos
Store procedure
, comoViews
,Functions
eTables
. Você só precisa escrever essa palavra-chave e pressionar a tecla de atalho.Por exemplo: desejo pesquisar 'PaymentTable', depois escrever 'PaymentTable' e selecionar ou destacar a palavra-chave escrita no editor de consultas e pressionar a tecla de atalho
ctrl+4
- ele fornecerá o resultado completo.fonte
Procedure or function 'Searchinall' expects parameter '@strFind', which was not supplied
Alguma idéia?O SQL Search da Redgate é uma ótima ferramenta para fazer isso, é um plug-in gratuito para SSMS.
fonte
Por favor, tome isso como uma alternativa "suja", mas isso me salvou muitas vezes, especialmente quando eu não estava familiarizado com o projeto DB. Às vezes, você está tentando procurar uma cadeia de caracteres em todos os SPs e esquece que parte da lógica relacionada pode estar oculta entre Funções e Acionadores ou pode ser simplesmente redigida de maneira diferente do que você pensava.
No MSSMS, você pode clicar com o botão direito do mouse no seu DB e selecionar o
Tasks -> Generate Scripts
assistente para gerar todos os SPs, Fns e Triggers em um único arquivo .sql.Certifique-se de selecionar gatilhos também!
Em seguida, basta usar o Sublime ou o Bloco de notas para procurar a string que você precisa encontrar. Eu sei que isso pode ser uma abordagem bastante ineficiente e paranóica, mas funciona :)
fonte
Você também pode usar este:
fonte
INFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITION
contém apenas os primeiros 4000 caracteres da rotina.Isso pode ajudá-lo!
fonte
fonte
fonte
Também você pode usar:
Isso inclui comentários
fonte
OBJECT_NAME ([id]) -> Nome do objeto (Exibir, Procedimento de armazenamento, Função escalar, Nome da função de tabela)
id (int) = número de identificação do objeto
xtype char (2) Tipo de objeto. Pode ser um dos seguintes tipos de objeto:
FN = função escalar
P = procedimento armazenado
V = Visualizar
TF = função de tabela
fonte
Criei um procedimento para pesquisar texto em procedimentos / funções, tabelas, visualizações ou trabalhos. O primeiro parâmetro @search é o critério de pesquisa, @ segmenta o destino da pesquisa, ou seja, procedimentos, tabelas etc. Se não especificado, pesquise em todas. @db é especificar o banco de dados a ser pesquisado, o padrão é o banco de dados atual. Aqui está minha consulta no SQL dinâmico.
fonte
Usando CHARINDEX :
Usando PATINDEX :
Usar esse duplo
[[]ABD]
é semelhante a escapar:fonte
tente também o seguinte:
fonte
fonte
Essa consulta é um texto de pesquisa no procedimento armazenado de todos os bancos de dados.
fonte
fonte
De vez em quando eu uso esse script para descobrir quais procs modificar, ou para descobrir o que usa uma coluna de uma tabela, ou essa tabela para remover algum lixo antigo. Ele verifica cada banco de dados na instância em que é executado pelo sp_msforeachdb maravilhosamente fornecido.
fonte
fonte
Você também pode usar
e depois corra
fonte