2009-07-23 103 views
2

我目前運行MS SQL Server 2005的sp_stored_procedures

sp_stored_procedures 

存儲過程來獲取SP的列表,對於給定的數據源。我需要通過它的PROCEDURE_NAME和PROCEDURE_OWNER列來查詢這個數據集。但是,PROCEDURE_NAME似乎有一個奇怪的返回值。它似乎在名稱的末尾添加了一個分號和一個數字。

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

這裏的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 

起初我認爲這些數字可能代表的參數的數量(直到NUM_INPUT_PARAMS在SQL Server中實現),但我已經添加和刪除的參數並沒有看到上市的變化。

這些數字是什麼意思?

回答

2

您可以使用不同的存儲過程具有相同的名稱,通過數字進行區分,可以一次刪除。語法是still valid如SQL 2K8的:

; number是一個可選的整數,它使用 來組織同名 的程序。這些分組程序 可以通過使用一個 DROP PROCEDURE語句放在一起。例如, 一個名爲orders的應用程序可能會使用名爲orderproc的 過程; 1, orderproc; 2等等。 DROP PROCEDURE orderproc語句全部刪除 。如果名稱包含 分隔標識符,則不應將 作爲 標識符的一部分包含在內;請僅在procedure_name周圍使用適當的 分隔符。

該功能位於official deprecated list

順便說一句,您可以使用目錄視圖來檢索過程:sys.procedures。我發現使用視圖比使用這些過程要容易得多。

0

請參閱CREATE PROCEDURE的MSDN文檔。在「參數」部分下,對於procedure_name,他們表示添加該類型的數字已被棄用。從語法圖中,; 1不是過程名稱的一部分,並且是可選的。自從;字符在T-SQL identifiers中不合法,您可以先查看字符串;在查詢結果中。

1

嗯,我不知道他們的意思 - 它可能是版本?

不過我倒是建議sp_stored_procedures一種替代方案:

select specific_schema, specific_name, * from information_schema.routines 

它給你的名字和所有者(除其他事項外),並且它沒有奇怪的字符。