J'ai un serveur lié qui va changer. Certaines procédures appellent le serveur lié comme ceci: [10.10.100.50].dbo.SPROCEDURE_EXAMPLE
. Nous avons également des déclencheurs qui font ce genre de travail. Nous devons trouver tous les endroits qui servent [10.10.100.50]
à le changer.
Dans SQL Server Management Studio Express, je n'ai pas trouvé de fonctionnalité comme «rechercher dans toute la base de données» dans Visual Studio. Une sélection système spéciale peut-elle m'aider à trouver ce dont j'ai besoin?
sql-server
stored-procedures
triggers
linked-server
Victor Rodrigues
la source
la source
type = 'C'
)?Vous pouvez le trouver comme
Il répertorie les noms de procédure stockée distincts qui contiennent du texte comme «Utilisateur» dans la procédure stockée. Plus d'informations
la source
syscomments
table stocke les valeurs dans des blocs de 8000 caractères, donc si vous avez la malchance de diviser le texte que vous recherchez à travers l'une de ces limites, vous ne le trouverez pas avec cette méthode.[Réponse tardive mais, espérons-le, utile]
L'utilisation de tables système ne donne pas toujours des résultats corrects à 100% car il se peut que certaines procédures stockées et / ou vues soient cryptées, auquel cas vous devrez utiliser une connexion DAC pour obtenir les données dont vous avez besoin.
Je recommanderais d'utiliser un outil tiers tel que ApexSQL Search qui peut traiter facilement les objets cryptés.
La table système Syscomments donnera une valeur nulle pour la colonne de texte au cas où l'objet est chiffré.
la source
la source
Cela fonctionnera pour vous:
la source
type = 'C'
)?Il existe de bien meilleures solutions que de modifier le texte de vos procédures stockées, fonctions et vues chaque fois que le serveur lié change. Voici quelques options:
Mettez à jour le serveur lié. Au lieu d'utiliser un serveur lié nommé avec son adresse IP, créez un nouveau serveur lié avec le nom de la ressource tel que
Finance
ouDataLinkProd
ou un autre. Ensuite, lorsque vous devez changer le serveur atteint, mettez à jour le serveur lié pour qu'il pointe vers le nouveau serveur (ou supprimez-le et recréez-le).Bien que vous ne puissiez malheureusement pas créer de synonymes pour des serveurs ou des schémas liés, vous POUVEZ créer des synonymes pour des objets situés sur des serveurs liés. Par exemple, votre procédure
[10.10.100.50].dbo.SPROCEDURE_EXAMPLE
pourrait être aliasée. Créez peut-être un schémadatalinkprod
, alorsCREATE SYNONYM datalinkprod.dbo_SPROCEDURE_EXAMPLE FOR [10.10.100.50].dbo.SPROCEDURE_EXAMPLE;
. Ensuite, écrivez une procédure stockée qui accepte un nom de serveur lié, qui interroge tous les objets potentiels de la base de données distante et (re) crée des synonymes pour eux. Tous vos SP et fonctions sont réécrits une seule fois pour utiliser les noms de synonymes en commençant pardatalinkprod
, et par la suite, pour passer d'un serveur lié à un autre que vous venez de faireEXEC dbo.SwitchLinkedServer '[10.10.100.51]';
et en une fraction de seconde, vous utilisez un serveur lié différent.Il peut y avoir encore plus d'options. Je recommande fortement d'utiliser les techniques supérieures de prétraitement, de configuration ou d'indirection plutôt que de modifier les scripts écrits par l'homme. La mise à jour automatique des scripts créés par la machine est très bien, il s'agit d'un prétraitement. Faire les choses manuellement est horrible.
la source
la source
Celui-ci que j'ai essayé dans SQL2008, qui peut rechercher dans toute la base de données en une fois.
la source
J'utilise celui-ci pour le travail. laissez les [] dans le champ @TEXT, semble vouloir tout renvoyer ...
la source
J'ai utilisé ces derniers dans le passé:
Dans ce cas particulier, où vous devez remplacer une chaîne spécifique dans les procédures stockées, le premier lien est probablement plus pertinent.
Un peu hors sujet, le complément de recherche rapide est également utile pour rechercher des noms d'objets avec SQL Server Management Studio. Une version modifiée est disponible avec quelques améliorations, et une autre version plus récente est également disponible sur Codeplex avec d'autres compléments utiles également.
la source
Toute recherche avec l'instruction SELECT ne vous donne que le nom de l'objet, où le mot clé de recherche contient. Le moyen le plus simple et efficace est d'obtenir le script de la procédure / fonction, puis de rechercher dans le fichier texte généré, je suit également cette technique :) Donc, vous êtes exact.
la source
la source
Je viens d'écrire ceci pour la référence croisée externe complète générique
la source
Vous pouvez rechercher dans les définitions de tous les objets de base de données à l'aide du SQL suivant:
la source