为什么在调用存储过程时调用用户定义函数需要所有者名称?

时间:2010-03-05 11:45:21

标签: sql-server tsql stored-procedures

为什么在调用存储过程时调用用户定义的函数需要所有者名称? 请帮忙!

3 个答案:

答案 0 :(得分:3)

我认为你的意思是架构名称?所有者是创建它的用户。

它将功能与内置功能区分开来。 “系统”存储过程和函数存在于master数据库中(因此可以搜索),而内置函数(如DATEADD)则驻留在数据库引擎本身。

我想当你为数据库引擎指定SELECT MyFunction()以确定你是指一个存在于数据库中的函数还是内置函数时,会更加困难。

答案 1 :(得分:2)

这实际上只是标量值函数的情况。

答案 2 :(得分:0)

在与Andy讨论之后,我在这里回答了我自己的问题: 存储过程在创建时存储在连接的当前数据库中。同时,函数存储在两个位置:数据库引擎(标量值内置的)和连接的当前数据库(用户定义的)。 因此,在调用用户定义的标量值函数时,我们需要模式名称前缀来区分它们与内置函数。对于其他类型的函数和存储过程,我们不需要此前缀。