SQL Server 标量函数和存储过程可以同名吗?

qncylg1j  于 2023-02-15  发布在  其他
关注(0)|答案(2)|浏览(126)

我们使用一个存储过程来生成一个内部编号(可通过OUTPUT关键字访问)。
由于不能在语句中使用存储过程,所以我认为创建一个函数来调用存储过程及其参数并返回OUTPUT值是个好主意,这样我就可以直接在语句中使用它。
是否可以在一个数据库中将存储过程和标量函数命名为相同的名称,这是一个好主意?

62o28rlo

62o28rlo1#

简单地回答这个问题(感谢马丁):不,我不能。
引发的错误消息为错误2714("数据库中已经存在名为'Foo'的对象。")。

k5ifujac

k5ifujac2#

数据库中任何关系对象的完整名称都是由两部分组成的名称:
1.模式名称,实际上是数据库中的容器

  1. object_name,这是相对于架构的唯一名称
    作为演示,您可以:
CREATE SCHEMA S_SQL;
GO

CREATE USER U_SQL WITHOUT LOGIN WITH DEFAULT_SCHEMA = S_SQL;
GO

GRANT CONTROL TO U_SQL;
GO

EXECUTE AS USER = 'U_SQL';
GO

CREATE FUNCTION F_FOO()
RETURNS CHAR(3)
AS
BEGIN 
   RETURN 'foo';
END;
GO

REVERT;
GO

CREATE PROCEDURE F_FOO
AS
RETURN 'oof';
GO

SELECT ROUTINE_NAME, ROUTINE_TYPE 
FROM INFORMATION_SCHEMA.ROUTINES;

您将拥有相同的对象名,但使用两个不同的方案...

相关问题