【发布时间】:2014-09-29 14:11:20
【问题描述】:
假设我有一个名为 MyDB 的数据库,其中包含一个名为 MyTable 的表。我可以参考这个
MyDb.dbo.MyTable
但是,如果我在存储过程中执行此操作,然后使用不同的名称部署数据库,则存储过程将不再工作。
如果我将其限定为
dbo.MyTable
然后它将起作用,我可以为数据库命名任何我想要的名称。但是如果我不再知道我的数据库在部署时会被调用什么,我就不能引用另一个数据库中的表。即我无法指定我真正想要的表在另一个数据库中(在同一台服务器上),即
MyOtherDb.dbo.MyTable
这个:http://www.sql-server-performance.com/2001/sql-best-practices/ 说
在表名前加上所有者的名字,这样可以提高 可读性并避免任何不必要的混淆。微软 SQL 服务器 Books Online 甚至声明使用所有者名称来限定表名 有助于执行计划重用,进一步提高性能。
我是 SQL Server 新手,不完全确定所有者是什么。此外,许多其他资源都规定应使用“完全限定名称”,但并未准确说明“完全限定名称”的含义。
抱歉,这是一个愚蠢的问题,但这里的最佳做法是什么?我宁愿现在就知道这一点,也不愿在三个月后为自己解决这个问题并进行大量重构。谢谢!
【问题讨论】:
-
坚持
schema.TableName格式。一旦你开始从你的数据库中引用其他数据库,你就会将它们紧密耦合在一起,避免这样做! -
对您的姓名进行限定是一种很好的做法。它将使您的 SQL 更具可读性,并且您将避免任何名称冲突或从错误数据库中提取的机会(似乎这永远不会发生,但它可以)。此外,IMO 开发和生产环境应尽可能紧密地镜像 - 这有助于保持这两个环境的稳定和可维护性。
标签: sql sql-server database