视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
SQLServer中的对象名称
2020-11-09 15:24:18 责编:小采
文档


欢迎进入Windows社区论坛,与300万技术人员互动交流 >>进入 在SQL Server中,数据库的每一个对象都是由一个具有4部分的完全限定名称来标识。 这种的名称格式为: Server.database.Schema.object; Server和database的省略一般不会出现大的问题,但是省略了sch

欢迎进入Windows社区论坛,与300万技术人员互动交流 >>进入

  在SQL Server中,数据库的每一个对象都是由一个具有4部分的完全限定名称来标识。

  这种的名称格式为:

  Server.database.Schema.object;

  Server和database的省略一般不会出现大的问题,但是省略了schema的时候,SQL Server一般会假定是已登录的用户的名称空间。如果没有明确的指派,一般又会给新用户默认的Dbo构架。

  有个例子,如果用户Fred登录进服务器Paul,它的数据库上下文设定为AdventureWorks2008,由于没有为Fred指派一个用户定义架构,他存在于默认的dbo构架中。

  如果Fred的查询Person表:

  Select * fromPerson;

  这个就会被解析成为:Paul.AdventureWorks2008.dbo.Person.

  但是Person的完全定义为:Paul.AdventureWorks2008.Person.Person.

  这样的情况下,正确的写法就应该是:

  Select *fromPerson.Person;

  当然我们有方法可以使用命令把Fred的默认架构改为Person架构。

  UseAdventureWorks2008;

  Go

  Alter User Fred withDefault_Schema=Person;

  Go

  另外的一个例子是创建了用户Fred的默认架构是Person,但是Fred想要检索的是dbo.Databaselog.

  Select * from databaselog;

  SQL Server 首先是会将它查询解析为:Paul.AdventureWorks2008.Person.Databaselpg,因为Fred的默认架构是Person,而Person架构中并不存在Person表,所以首次解析不会成功,但是之后SQL Server会转而用dbo架构,解析成为正确的形式,并且得到正确的结果。

  SQL Server总之是首先搜索指派的架构,如果首次解析失败,则会搜索dbo架构。

  特别注意的是:在两个架构中,同样会出现有相同名称的表,所以在处理这种问题的时候是需要特别注意的。不然可能会出现查询数据不对的情况。

下载本文
显示全文
专题