为什么这个sproc引用找到要更新的正确表?

时间:2009-02-23 14:48:06

标签: sql-server sql-server-2008

如果我有这样的表:

ImportSet1.Users
ImportSet2.Users
ImportSet3.Users

然后在我的sproc中我这样做:

CREATE PROCEDURE [ImportSet2].[UpdateUsers]

...
UPDATE Users
   set blah = 234
WHERE id = 234

这似乎有效,但为什么呢?从那时起什么前缀[ImportSet2]表示表名的一部分? (在本例中为ImportSet2)

2 个答案:

答案 0 :(得分:3)

sproc是在ImportSet2模式下构建的,因此,默认情况下,如果未指定模式名称,它将引用ImportSet2模式中的对象。

但是,我认为最好的做法是使用模式名称对对象进行完全限定。

答案 1 :(得分:0)

要回答“从什么时候开始”,当然到2000年,您可以拥有除dbo以外的所有者拥有的对象。自2005年以来,MS分离了所有者和模式的概念。

相信该功能出现在SQL Server的早期版本中,无论是6.5还是7.0。所以这并不是什么新鲜事(尽管2005年之前使用这个功能会有相当大的痛苦)