双点表限定符

w00*_*977 22 sql sql-server

我正在研究由外部供应商开发的新数据库模式.有两个数据库:

Database1
Database2
Run Code Online (Sandbox Code Playgroud)

他们给我发了一个SQL语句,它连接两个数据库之间的表.有些地方他们使用双点符号.我以前从未见过这个.请参阅下面的SQL语句(这不是他们发给我的声明):

select * from database2..Person
Run Code Online (Sandbox Code Playgroud)

上面的语句是从database1运行的.为什么它有两个点?如果我删除其中一个点,则查询不会运行.

我做了一些谷歌搜索并遇到了这个:http://www.sqlservercentral.com/Forums/Topic585446-338-1.aspx.这表明它指的是架构.然而:

  1. sql语句中的模式为空,即两个点之间没有文本.
  2. Person表是database2中dbo架构的一部分.

Raf*_*baj 19

多亏了这个点,您的查询将选择默认架构(dbo).

当您有两个数据库时,需要提供表的完整路径.如果我们有:Database1架构:dbo,来宾表dbo.A,来宾:数据库2架构:dbo,来宾表dbo.B,来宾:B

如果我们创建select语句,如:

从Database2..B中选择*

我们从dbo.B表中选择数据如果我们想指定我们需要引用的模式

select * from Database2.schemaname.tablename
Run Code Online (Sandbox Code Playgroud)

编辑:正如同事指出的那样,默认架构可以在数据库中更改,但是在这个特定的例子中它似乎是dbo :)

  • 请注意,用户的默认架构可能不是"dbo". (6认同)
  • 请注意,默认模式不一定是“dbo”,但在本例中它可能是。可以更改默认模式(例如“alter user <user-name> with default_schema = <new-schema>”。 (2认同)

nan*_*ano 13

这是一个数据库架构.表的完整三部分名称是:

databasename.schemaname.tablename
Run Code Online (Sandbox Code Playgroud)

对于用户的默认架构,您还可以省略架构名称:

databasename..tablename
Run Code Online (Sandbox Code Playgroud)

您还可以指定链接的服务器名称:

servername.databasename.schemaname.tablename
Run Code Online (Sandbox Code Playgroud)

您可以在MSDN上阅读有关将标识符用作表名的更多信息