En général, pour ce type de requête vous auriez besoin de boucler la liste des bases de données (en utilisant peut-être sp_MSforeachdb
) et interroger les tables système individuelles dans chaque base de données.
Ce qui suit pourrait bien fonctionner pour vous, ce qui évite cela. La première méthode vérifie object_id
et name
mais ne vérifie pas que les objets sont réellement des procédures stockées.
La seconde utilise simplement le nom comme demandé dans les commentaires, valide également le type d'objet, mais vérifie seulement le schéma par défaut.
WITH objects(name, id)
AS (SELECT 'uspGetBillOfMaterials', 23671132 UNION ALL
SELECT 'uspPrintError', 37575172) SELECT 'Using Id and Name',
sys.databases.name,
objects.name
FROM sys.databases,
objects
WHERE OBJECT_NAME(id, database_id) = objects.name
UNION ALL
SELECT 'Using Name (assumes default schema)',
sys.databases.name,
objects.name
FROM sys.databases,
objects
WHERE OBJECT_ID(databases.name + '..uspGetBillOfMaterials', 'P') IS NOT NULL
Très cool, fait exactement ce dont j'avais besoin. Merci! Comment le code changerait-il si c'était juste le nom que j'avais? Juste penser comme je dois le faire avec d'autres objets dans le futur et je ne pourrais pas avoir l'ID. Cela signifie que la validation n'est pas un problème cependant. Merci encore. – jimminybob
@jimminybob - Si vous n'aviez que le nom, cela ne fonctionnerait pas car il tire parti du fait que 'OBJECT_NAME' accepte un second paramètre pour l'ID de base de données. Ce n'est pas le cas pour la fonction inverse "OBJECT_ID". Vous devez interroger les vues de catalogue de base de données individuellement dans ce cas. –
Ah je vois. Pas de soucis alors. Merci pour toute votre aide – jimminybob