Je souhaite rechercher un texte dans toutes mes procédures stockées de base de données. J'utilise le SQL ci-dessous:
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]%';
Je veux rechercher [ABD]
dans toutes les procédures stockées, y compris les crochets, mais cela ne donne pas le bon résultat. Comment puis-je modifier ma requête pour y parvenir?
sql
sql-server
stored-procedures
DharaPPatel
la source
la source
SCHEMA_NAME(o.schema_id) AS Schema_Name
à la clause select.Essayez cette demande:
Requete
la source
Avez-vous essayé d'utiliser certains des outils tiers pour effectuer la recherche? Il y en a plusieurs disponibles gratuitement et cela m'a fait gagner une tonne de temps dans le passé.
Voici deux compléments SSMS que j'ai utilisés avec succès.
Recherche ApexSQL - Recherche à la fois le schéma et les données dans les bases de données et dispose de fonctionnalités supplémentaires telles que le suivi des dépendances, etc.
Pack d'outils SSMS - Possède la même fonctionnalité de recherche que la précédente et plusieurs autres fonctionnalités intéressantes. Pas gratuit pour SQL Server 2012 mais toujours très abordable.
Je sais que cette réponse n'est pas liée à 100% aux questions (qui étaient plus spécifiques) mais j'espère que d'autres trouveront cela utile.
la source
J'exécute généralement ce qui suit pour y parvenir:
la source
Bonne pratique pour travailler avec SQL Server.
Créez la procédure stockée ci-dessous et définissez la touche courte,
Maintenant - Réglez la touche courte comme ci-dessous,
La prochaine fois que chaque fois que vous voulez trouver un texte particulier dans l' un des quatre objets comme
Store procedure
,Views
,Functions
etTables
. Il vous suffit d'écrire ce mot-clé et d'appuyer sur la touche de raccourci.Par exemple: je veux rechercher «PaymentTable» puis écrire «PaymentTable» et assurez-vous de sélectionner ou de mettre en surbrillance le mot-clé écrit dans l'éditeur de requête et d'appuyer sur la touche de raccourci
ctrl+4
- cela vous fournira le résultat complet.la source
Procedure or function 'Searchinall' expects parameter '@strFind', which was not supplied
Des idées?La recherche SQL de Redgate est un excellent outil pour ce faire, c'est un plugin gratuit pour SSMS.
la source
Veuillez prendre cela comme une alternative "sale" mais cela m'a sauvé plusieurs fois, surtout quand je n'étais pas familier avec le projet DB. Parfois, vous essayez de rechercher une chaîne dans tous les SP et oubliez qu'une partie de la logique associée peut avoir été cachée entre les fonctions et les déclencheurs ou elle peut simplement être formulée différemment que vous ne le pensiez.
À partir de votre MSSMS, vous pouvez cliquer avec le bouton droit sur votre base de données et sélectionner l'
Tasks -> Generate Scripts
assistant pour générer tous les SP, Fns et déclencheurs dans un seul fichier .sql.Assurez-vous également de sélectionner les déclencheurs!
Ensuite, utilisez simplement Sublime ou Notepad pour rechercher la chaîne que vous devez trouver. Je sais que cela peut être une approche assez inefficace et paranoïaque, mais cela fonctionne :)
la source
Vous pouvez également utiliser celui-ci:
la source
INFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITION
ne contient que les 4000 premiers caractères de la routine.Cela pourrait vous aider!
la source
la source
la source
Vous pouvez également utiliser:
Cela inclut des commentaires
la source
OBJECT_NAME ([id]) -> Nom de l'objet (affichage, procédure de stockage, fonction scalaire, nom de la fonction de table)
id (int) = numéro d'identification de l'objet
xtype char (2) Type d'objet. Peut être l'un des types d'objet suivants:
FN = fonction scalaire
P = Procédure stockée
V = Voir
TF = fonction de table
la source
J'ai créé une procédure pour rechercher du texte dans des procédures / fonctions, des tableaux, des vues ou des travaux. Le premier paramètre @search est le critère de recherche, @target la cible de recherche, c'est-à-dire les procédures, les tables, etc. Si non spécifié, recherchez tout. @db consiste à spécifier la base de données à rechercher, par défaut à votre base de données actuelle. Voici ma requête en SQL dynamique.
la source
Utilisation de CHARINDEX :
Utilisation de PATINDEX :
L'utilisation de ce double
[[]ABD]
est similaire à l'échappement:la source
essayez aussi ceci:
la source
la source
Cette requête est un texte de recherche dans une procédure stockée de toutes les bases de données.
la source
la source
De temps en temps, j'utilise ce script pour déterminer les procs à modifier, ou pour comprendre ce qui utilise une colonne d'une table, ou cette table pour supprimer des ordures anciennes. Il vérifie chaque base de données sur l'instance sur laquelle elle est exécutée par le sp_msforeachdb merveilleusement fourni.
la source
la source
Vous pouvez aussi utiliser
puis exécutez
la source