2009-07-23 12 views
2

Je suis actuellement en cours d'exécution de laMS SQL Server 2005 sp_stored_procedures

sp_stored_procedures 

procédure stockée pour récupérer une liste de SP pour une source de données donnée. Je devrai interroger cet ensemble de données par ses colonnes PROCEDURE_NAME et PROCEDURE_OWNER. Cependant, PROCEDURE_NAME semble avoir une valeur de retour étrange. Il semble ajouter un point-virgule et un nombre à la fin du nom.

sel_AppUser;1 
sel_AppUser_all;1 
sel_AppUser_by_login;1 
sel_Browsable;1 

Voilà sel_Browsable

CREATE PROCEDURE [dbo].[sel_Browsable] 
@BrowsableID uniqueidentifier 
AS 
BEGIN 
SELECT * FROM Browsable WHERE browsableID = @BrowsableID FOR XML AUTO, ELEMENTS 
SELECT * FROM Attribute WHERE objectID = @BrowsableID FOR XML AUTO, ELEMENTS 
SELECT * FROM Search WHERE browsableID = @BrowsableID ORDER BY searchOrder FOR XML AUTO, ELEMENTS 
SELECT Attribute.* FROM Attribute INNER JOIN Search ON Attribute.objectID = Search.searchID WHERE browsableID = @BrowsableID ORDER BY searchOrder FOR XML AUTO, ELEMENTS 
SELECT Criterion.* FROM Criterion INNER JOIN Search ON Criterion.searchID = Search.searchID WHERE browsableID = @BrowsableID ORDER BY searchOrder, criterionOrder FOR XML AUTO, ELEMENTS 
SELECT Attribute.* FROM Attribute INNER JOIN Criterion ON Attribute.objectID = Criterion.criterionID INNER JOIN Search ON Criterion.searchID = Search.searchID WHERE browsableID = @BrowsableID ORDER BY searchOrder, criterionOrder FOR XML AUTO, ELEMENTS 
SELECT CriterionOperator.* FROM CriterionOperator INNER JOIN Criterion ON CriterionOperator.criterionID = Criterion.criterionID INNER JOIN Search ON Criterion.searchID = Search.searchID WHERE browsableID = @BrowsableID ORDER BY searchOrder, criterionOrder, operatorOrder FOR XML AUTO, ELEMENTS 
SELECT CriterionValue.* FROM CriterionValue INNER JOIN Criterion ON CriterionValue.criterionID = Criterion.criterionID INNER JOIN Search ON Criterion.searchID = Search.searchID WHERE browsableID = @BrowsableID ORDER BY searchOrder, criterionOrder, criterionValueOrder FOR XML AUTO, ELEMENTS 
END 

Initialement, je pensais que ces chiffres pourraient représenter le nombre de paramètres (jusqu'à NUM_INPUT_PARAMS est implémenté dans SQL Server) mais je l'ai ajouté et les paramètres enlevé et n'a pas vu un changement dans la liste.

Que signifient ces chiffres?

Répondre

2

Vous pouvez avoir différentes procédures stockées portant le même nom, différenciées par des nombres, qui peuvent être déposées simultanément. La syntaxe est still valid à partir de SQL 2k8:

; nombre Est un entier facultatif que est utilisé pour regrouper les procédures du même nom. Ces procédures groupées peuvent être supprimées ensemble en utilisant une instruction DROP PROCEDURE . Par exemple, une application appelée commandes peut utiliser procédures nommées orderproc; 1, orderproc; 2, et ainsi de suite. L'instruction DROP PROCEDURE orderproc supprime l'ensemble du groupe. Si le nom contient identificateurs délimités, le numéro ne doit pas être inclus dans l'identificateur ; utilisez le délimiteur approprié uniquement autour de nom_procédure.

La caractéristique est sur le official deprecated list. Vous pouvez utiliser les vues de catalogue pour récupérer les procédures: sys.procedures. Je trouve l'utilisation des vues beaucoup plus facile que d'utiliser les procédures.

0

Consultez la documentation de MSDN pour CREATE PROCEDURE. Sous la section "Arguments", pour procedure_name, ils disent que l'ajout de ce type de numéro est obsolète. À partir du diagramme de syntaxe, le; 1 ne fait pas partie du nom de la procédure et est facultatif. Depuis le; caractère n'est pas légal dans T-SQL identifiers, vous pouvez simplement regarder la chaîne avant; dans les résultats de la requête.

1

Eh bien, je ne sais pas ce qu'ils veulent dire - ce pourrait être la version?

Mais je vous recommande une alternative à sp_stored_procedures:

select specific_schema, specific_name, * from information_schema.routines 

Il vous donne le nom et le propriétaire (entre autres), et il ne dispose pas de caractères étranges.