2010-03-05 77 views

回答

3

我假设你是指模式名称?所有者是创建它的用户。

它区分功能和内置功能。 “系统”存储过程和函数存在于主数据库中(因此可以进行搜索),而内置函数(例如DATEADD)驻留在数据库引擎中。

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

+0

谢谢安迪! 是的,我的意思是模式名称。那么,你说的是什么帮助,但我并不完全同意你的看法。为什么我们不需要区分用户的存储过程与内置存储过程? – 2010-03-07 05:40:48

+0

由于存储过程只存在于数据库中,因此它们不会内置,因此引擎可以同时搜索主数据库和当前数据库。这就是为什么你应该尽量不要命名你的过程sp_something。如果SQL在您的过程开始时看到sp_,它将首先搜索master数据库。 – 2010-03-07 09:04:21

+0

谢谢安迪。我现在明白了。正如伊恩在下面所说的,我们只需要标量函数的模式。对于表值函数,我们不需要一个。我想听听你对安迪的想法。请与我讨论。 – 2010-03-07 10:27:32

2

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

+0

是的,你是对的伊恩。我刚刚测试并确认你说的话!那么从这个角度来说,我们可以说“没有系统表值函数”吗? – 2010-03-07 05:54:37

0

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

相关问题