是否有任何理由在存储过程中引用数据库名称?

时间:2014-05-13 11:57:34

标签: sql-server tsql

通过我们MyDatabase上的程序,我找到了几个引用自己的程序,例如

SELECT colA, colB FROM [MyDatabase].[Schema].[Table]

以这种方式包含数据库名称有什么好处吗?我看不出有什么特别的理由这样做,这使得触发器的便携性降低了。

当然,如果您正在进行

,则需要包含数据库名称
SELECT colC, colD FROM [MyOtherDatabase].[Schema].[Table]

这是一个相当小的问题,但我的第一反应是“可能不是最佳做法”所以我想知道是否有任何好处我缺少或者我们是否应该从所有这些引用中删除db名称。

2 个答案:

答案 0 :(得分:1)

评论时间有点长。

我会选择删除数据库名称,但我不知道这是否是“最佳做法”。在进行开发时,我有时倾向于在服务器上保留同一数据库的多个版本。代码中的特定数据库引用会导致问题。 (更好的开发环境是拥有另一个专用的SQL Server实例。)

但是,您应该考虑:

  • 您的应用程序是仅使用一个数据库还是多个数据库。如果有多个数据库,您可能希望将存储过程从一个移动到另一个,因此显式引用会很有用。
  • 对您的版本控制软件有任何影响。
  • 维护数据库代码,添加新功能和修复问题的过程。

答案 1 :(得分:1)

考虑到这一点,所有者是dbo;你可以改变这条线

SELECT colA, colB FROM [MyDatabase].[Schema].[Table]

use [MyDatabase] 
GO
SELECT colA, colB FROM [Table]

通常在您的过程中,所有查询都将引用同一数据库中的表,但如果您有具有跨数据库引用的查询,则必须使用3部分名称DB.Owner.Table