我想知道是否有人可以解释在连接中唯一标识 sql server 对象的概念。
在我的示例中,有 2 个模式和 2 个表(但名称相同)。我的假设是,即使两个模式之间的表名可能相同,只要使用完整限定名databasename.schemaname.objectname 引用它们,SQL Server 就应该能够区分出差异。然而,情况似乎并非如此,解决方法是使用别名.
如果有人可以解释或指出一些相关文献,我将不胜感激为什么sql server不能唯一标识这些.
CREATE SCHEMA [Sch1]
GO
CREATE SCHEMA [Sch2]
GO
CREATE TABLE [Sch1].[Table_1](
[ID] [int] NULL,
[DESC] [nchar](10) NULL
) ON [PRIMARY]
GO
CREATE TABLE [Sch2].[Table_1](
[ID] [int] NULL,
[DESC] [nchar](10) NULL
) ON [PRIMARY]
GO
Select *
From Sch1.Table_1
Join Sch2.Table_1
on Sch1.Table_1.Id = Sch2.Table_1.Id
The SQL Server
支持多部分标识符:
linked_server.db_name.schema.table_name
在你的情况下,你有:
Select *
From Sch1.Table_1
Join Sch2.Table_1
on Sch1.Table_1.Id = Sch2.Table_1.Id
现在你想知道为什么SQL Server
无法区分它们:
Sch1.Table_1 != Sch2.Table_1
该案是因为SQL Server
使用称为exposed name
.
暴露的名字
哪一个是多部分表名称的最后一部分(如果没有
别名),或别名(如果存在)
返回您的查询,您已经暴露了姓名Table_1
and Table_1
这是重复的,您需要使用别名。
From SQL Server 2005+
:
重复表检测算法已相应更改,
这样任何具有相同公开名称的表都会被考虑
重复项
我怀疑你的代码可以与 SQL Server 2000 一起工作,但我无法确定它。
欲了解更多信息,请阅读Msg 1013 http://blogs.msdn.com/b/ialonso/archive/2007/12/21/msg-1013-the-object-s-and-s-in-the-from-clause-have-the-same-exposed-names-use-correlation-names-to-distinguish-them.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)