【问题标题】:Why to use full 2-part table names in SQL Server为什么在 SQL Server 中使用完整的两部分表名
【发布时间】:2020-04-20 19:32:29
【问题描述】:

我之前问过一个关于在 SQL Server 中缩短表名的问题,偶然发现了这篇文章:https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2012/dn148262(v=msdn.10),它建议使用完全范围的表名,例如 [dbo].[Title] 而不是 Title

使用全域表名的原因是什么?我从来没有遇到过在数据库中有多个相同表名的地方(实际上我什至不认为这是可能的?),所以对我来说这似乎是不必要的,但我对 SQL Server 很陌生,所以想知道为什么这是首选方式。

【问题讨论】:

  • 如果你有dbo.TitleMySchema.Title怎么办?如果你只写Title,你指的是哪一个?
  • @Sami SQL 服务器在数据库连接中有多个方案吗?如果是这样,有什么好的参考链接可以查看它的结构(我主要将 MySQL 用于数据库)。
  • 它在您提供的文档中:“对于临时查询和准备好的语句,如果需要进行对象名称解析,则不会发生查询重用。包含在存储过程、函数和触发器没有这个限制。但是,通常应该注意的是,使用两部分对象名称(即 schema.object)为计划重用提供了更多机会,应予以鼓励。"
  • @David542 SQL Server 允许您创建多个方案,在这种情况下,它通常会使用默认方案dbohere is a simple example。你总能看到docs online
  • @Sami 这里是关于数据库的内容:A database in SQL Server is made up of a collection of tables that stores a specific set of structured data. A table contains a collection of rows, also referred to as records or tuples, and columns, also referred to as attributes. Each column in the table is designed to store a certain type of information, for example, dates, names, dollar amounts, and numbers.。那么模式在哪里发挥作用呢? docs.microsoft.com/en-us/sql/relational-databases/databases/…

标签: sql sql-server tsql database-schema


【解决方案1】:

从您提供链接的文档中:

"对于即席查询和准备好的语句,如果需要进行对象名称解析,则不会发生查询重用。存储过程、函数和触发器中包含的查询没有此限制。 但是,通常应该注意,使用两部分对象名称(即 schema.object)为计划重用提供了更多机会,应予以鼓励。”

如果需要进行对象名称解析,则不会发生查询重用

【讨论】:

  • 您能详细说明一下吗?例如,如何确定对象名称解析?除了查询复用,还有其他原因吗?
  • 无论在哪里需要名称,都需要对其进行解析,即:在选择、插入、更新中......您假设会有一个单一的方案,但事实并非如此(检查以 AdventureWorks 示例数据库为例)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多