我目前正在运行
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最初,我认为这些数字可能表示参数的数量(直到在SQL Server中实现了NUM_INPUT_PARAMS ),但是我已经添加和删除了参数,并且在清单中没有看到任何变化。
这些数字意味着什么?
发布于 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。我发现使用视图比使用过程容易得多。
发布于 2009-07-23 22:04:51
嗯,我不知道他们是什么意思--可能是版本吧?
但我会推荐一个sp_stored_procedures的替代方案:
select specific_schema, specific_name, * from information_schema.routines它为您提供了名称和所有者(以及其他信息),并且没有奇怪的字符。
发布于 2009-07-23 21:37:02
请参阅CREATE PROCEDURE的MSDN文档。在"Arguments“部分,对于procedure_name,他们说添加这样的数字是不赞成的。从语法图中,;1不是过程名称的一部分,并且是可选的。由于;字符在T-SQL identifiers中是非法的,因此您可以只查看查询结果中;之前的字符串。
https://stackoverflow.com/questions/1174579
复制相似问题