代码之家  ›  专栏  ›  技术社区  ›  Tyler

MS SQL Server 2005 sp_存储过程

  •  2
  • Tyler  · 技术社区  · 17 年前

    我正在运行

    sp_stored_procedures
    

    用于检索给定数据源的SP列表的存储过程。我需要按过程名称和过程所有者列查询这个数据集。但是,过程名称似乎有一个奇怪的返回值。它似乎在名称的末尾附加了一个分号和一个数字。

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

    这是可浏览的

    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_参数在SQL Server中实现),但我已经添加和删除了参数,并且在列表中没有看到任何变化。

    这些数字是什么意思?

    4 回复  |  直到 17 年前
        1
  •  2
  •   Remus Rusanu    17 年前

    您可以使用相同名称的不同存储过程,通过数字区分,可以同时将wich放在一起。语法是 still valid 关于SQL 2K8:

    ;数字是一个可选的整数, 用于对 同名。这些分组过程 可以用一个放在一起 删除过程语句。例如, 名为orders的应用程序可能会使用 名为orderproc;1的过程, orderproc;2,等等。跌落 过程orderproc语句删除 整个团队。如果名称包含 分隔标识符,数字 不应作为 标识符;使用适当的 仅在过程名称周围使用分隔符。

    功能在 official deprecated list .

    btw您可以使用目录视图来检索过程: sys.procedures . 我发现使用视图比使用过程容易得多。

        2
  •  1
  •   Jeff Meatball Yang    17 年前

    嗯,我不知道它们是什么意思——可能是版本?

    但我建议您选择一种替代sp_存储\过程的方法:

    select specific_schema, specific_name, * from information_schema.routines
    

    它给你名字和主人(除其他外),而且它没有奇怪的字符。

        3
  •  0
  •   Harold L    17 年前

    有关详细信息,请参阅msdn文档 CREATE PROCEDURE . 在“arguments”部分中,对于过程\u name,他们表示不赞成添加此类数字。从语法图中,;1不是过程名称的一部分,是可选的。因为;角色在 T-SQL identifiers 您只需查看查询结果中之前的字符串即可。

        4
  •  0
  •   user1529413    7 年前

    我认为它是一种类型,其中0=函数,1=存储过程。

    推荐文章