Eu tenho um servidor de links que mudará. Alguns procedimentos chamar o servidor vinculado como este: [10.10.100.50].dbo.SPROCEDURE_EXAMPLE
. Temos gatilhos também fazendo esse tipo de trabalho. Precisamos encontrar todos os lugares usados [10.10.100.50]
para alterá-lo.
No SQL Server Management Studio Express, não encontrei um recurso como "localizar no banco de dados inteiro" no Visual Studio. Um sys-select especial pode me ajudar a encontrar o que eu preciso?
sql-server
stored-procedures
triggers
linked-server
Victor Rodrigues
fonte
fonte
type = 'C'
)?Você pode achar isso como
Ele listará nomes distintos de procedimentos armazenados que contêm texto como 'Usuário' dentro do procedimento armazenado. Mais informações
fonte
syscomments
tabela armazena os valores em blocos de 8.000 caracteres. Portanto, se você tiver a infelicidade de ter o texto que está procurando dividido em um desses limites, não o encontrará com esse método.[Resposta tardia, mas espero que útil]
O uso de tabelas do sistema nem sempre fornece resultados 100% corretos, pois pode haver a possibilidade de que alguns procedimentos e / ou visualizações armazenados sejam criptografados. Nesse caso, você precisará usar a conexão DAC para obter os dados necessários.
Eu recomendo o uso de uma ferramenta de terceiros, como o ApexSQL Search, que pode lidar com objetos criptografados facilmente.
A tabela do sistema Syscomments fornecerá um valor nulo para a coluna de texto, caso o objeto seja criptografado.
fonte
fonte
Isso funcionará para você:
fonte
type = 'C'
)?Existem soluções muito melhores do que modificar o texto dos procedimentos, funções e visualizações armazenados cada vez que o servidor vinculado é alterado. Aqui estão algumas opções:
Atualize o servidor vinculado. Em vez de usar um servidor vinculado nomeado com seu endereço IP, crie um novo servidor vinculado com o nome do recurso, como
Finance
ouDataLinkProd
ou algum desses. Quando você precisar alterar qual servidor é atingido, atualize o servidor vinculado para apontar para o novo servidor (ou solte-o e recriá-lo).Embora, infelizmente, você não possa criar sinônimos para servidores ou esquemas vinculados, você PODE criar sinônimos para objetos localizados em servidores vinculados. Por exemplo, seu procedimento
[10.10.100.50].dbo.SPROCEDURE_EXAMPLE
poderia ser alternativo. Talvez crie um esquemadatalinkprod
, entãoCREATE SYNONYM datalinkprod.dbo_SPROCEDURE_EXAMPLE FOR [10.10.100.50].dbo.SPROCEDURE_EXAMPLE;
. Em seguida, escreva um procedimento armazenado que aceite um nome de servidor vinculado, que consulte todos os objetos em potencial do banco de dados remoto e (re) crie sinônimos para eles. Todos os seus SPs e funções são reescritos apenas uma vez para usar os nomes de sinônimosdatalinkprod
, e depois disso, para mudar de um servidor vinculado para outro, basta você fazerEXEC dbo.SwitchLinkedServer '[10.10.100.51]';
e, em uma fração de segundo, usar um servidor vinculado diferente.Pode haver ainda mais opções. Eu recomendo usar as técnicas superiores de pré-processamento, configuração ou indireção, em vez de alterar scripts escritos por humanos. A atualização automática de scripts criados por máquina é boa, é pré-processamento. Fazer as coisas manualmente é horrível.
fonte
fonte
Este eu tentei no SQL2008, que pode pesquisar de todos os db de uma só vez.
fonte
Eu uso este para o trabalho. deixe o [] 's no campo @TEXT, parece querer retornar tudo ...
fonte
Eu usei estes no passado:
Nesse caso específico, em que você precisa substituir uma sequência específica nos procedimentos armazenados, o primeiro link é provavelmente mais relevante.
Um pouco estranho, o suplemento Pesquisa rápida também é útil para pesquisar nomes de objetos com o SQL Server Management Studio. Há uma versão modificada disponível com algumas melhorias e outra versão mais recente também disponível no Codeplex com alguns outros suplementos úteis.
fonte
Qualquer pesquisa com a instrução select fornece apenas o nome do objeto, onde a palavra-chave de pesquisa contém. A maneira mais fácil e eficiente é obter o script do procedimento / função e, em seguida, procurar no arquivo de texto gerado, eu também sigo essa técnica :) Então você é o ponto exato.
fonte
fonte
Acabei de escrever isso para referência externa cruzada genérica completa
fonte
Você pode pesquisar nas definições de todos os objetos de banco de dados usando o seguinte SQL:
fonte