首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS SQL Server 2005 sp_stored_procedures

MS SQL Server 2005 sp_stored_procedures
EN

Stack Overflow用户
提问于 2009-07-23 21:24:53
回答 4查看 570关注 0票数 3

我目前正在运行

代码语言:javascript
复制
sp_stored_procedures

存储过程来检索给定数据源的SP列表。我需要通过它的PROCEDURE_NAME和PROCEDURE_OWNER列来查询这个数据集。然而,PROCEDURE_NAME似乎有一个奇怪的返回值。它似乎在名称的末尾附加了一个分号和一个数字。

代码语言:javascript
复制
sel_AppUser;1
sel_AppUser_all;1
sel_AppUser_by_login;1
sel_Browsable;1

这是sel_Browsable

代码语言:javascript
复制
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

最初,我认为这些数字可能表示参数的数量(直到在SQL Server中实现了NUM_INPUT_PARAMS ),但是我已经添加和删除了参数,并且在清单中没有看到任何变化。

这些数字意味着什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-23 22:20:43

可以有不同的存储过程具有相同的名称,并通过数字进行区分,这些存储过程可以一次放在一起。从SQL2k8开始,语法为still valid

;number是一个可选整数,用于对同名的过程进行分组。可以使用一条DROP PROCEDURE语句将这些分组的过程一起删除。例如,一个名为orders的应用程序可能使用名为orderproc;1、orderproc;2等的过程。DROP PROCEDURE orderproc语句删除整个组。如果名称包含分隔的标识符,则不应将数字作为标识符的一部分;仅在procedure_name周围使用适当的分隔符。

该功能位于official deprecated list上。

顺便说一句,您可以使用目录视图来检索过程:sys.procedures。我发现使用视图比使用过程容易得多。

票数 3
EN

Stack Overflow用户

发布于 2009-07-23 22:04:51

嗯,我不知道他们是什么意思--可能是版本吧?

但我会推荐一个sp_stored_procedures的替代方案:

代码语言:javascript
复制
select specific_schema, specific_name, * from information_schema.routines

它为您提供了名称和所有者(以及其他信息),并且没有奇怪的字符。

票数 1
EN

Stack Overflow用户

发布于 2009-07-23 21:37:02

请参阅CREATE PROCEDURE的MSDN文档。在"Arguments“部分,对于procedure_name,他们说添加这样的数字是不赞成的。从语法图中,;1不是过程名称的一部分,并且是可选的。由于;字符在T-SQL identifiers中是非法的,因此您可以只查看查询结果中;之前的字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1174579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档