使用双点表示法调用函数会产生语法错误

时间:2015-01-27 20:14:01

标签: sql-server tsql sql-server-2012

我最近开始为各种MCSE:BI考试做一些研究。在这样做的过程中,我遇到了以前没有使用过的SQL Server方面。双点符号不是我用过的东西,所以这个场景让我觉得有些奇怪。

我的用户的默认架构为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。我遇到了一些关于如何解决命名问题的讨论,但我没有看到任何提及这种“限制”的内容。既然我可以调用一个过程,或者从表中选择,使用双点表示法,为什么我不能以类似的方式调用函数?

1 个答案:

答案 0 :(得分:1)

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

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