SQL Server 对象名称

2024-03-21

我想知道是否有人可以解释在连接中唯一标识 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(使用前将#替换为@)

SQL Server 对象名称 的相关文章

随机推荐