使用双点符号调用函数会产生语法错误

Calling function using double dot notation yields syntax error

我最近开始为各种 MCSE:BI 考试做一些学习。在这样做的过程中,我遇到了以前从未使用过的 SQL 服务器的各个方面。双点符号我用得不多,所以这个场景让我觉得有点奇怪。

我的用户的默认架构是 dbo,下面的所有对象都在 dbo 下创建。

给定以下示例:

use laboratory

create table tbl_simple_test(SimpleTestID int identity(1,1), SomeVal varchar(255))
go

insert tbl_simple_test
select 'test value 1'
go

create procedure usp_simple_procedure
AS
BEGIN

    select 1

END
go

create function fn_simple_function()
Returns int
AS
BEGIN

    Declare @Result int

    select @Result = 1

    return @Result

END
go

select * from laboratory.dbo.tbl_simple_test
--returns record we inserted above

select * from laboratory..tbl_simple_test
--returns record we inserted above

exec laboratory.dbo.usp_simple_procedure
--returns 1

exec laboratory..usp_simple_procedure
--returns 1

select laboratory.dbo.fn_simple_function()
--returns 1

select laboratory..fn_simple_function()
--syntax error

我在 SO 上进行了一些谷歌搜索。我遇到了一些关于如何解决命名的讨论,但我没有看到任何提及此 "limitation" 的内容。既然我可以使用双点符号从 table 调用过程或 select,为什么我不能以类似的方式调用函数?

SQL 服务器 must be prefixed by a schema identifier 中的标量 UDF。虽然我找不到具体的理由,但我推测这是为了减少内部函数(ISNULL 等)和 UDF 之间的混淆和命名空间冲突。

这样做的结果是双点表示法(您指定数据库但使用该数据库的默认模式)不适用于 UDF。