Chi*_*nho 3 t-sql sql-server sql-server-2008
我有这个函数调用fn_blah,它驻留在MasterSQL Server 2000框的数据库中.相同的函数驻留在masterSQL Server 2008框的数据库中.在SQL Server 2000框中,该函数在不指定所有者的情况下在不同的数据库上下文中运行正常(例如.dbo):
User OtherDB1;
EXEC fn_blah;
Run Code Online (Sandbox Code Playgroud)
但在SQL Server 2008框中,上述查询将无法正常工作.如果您将数据库上下文更改为master,那么将起作用,然后像上面那样运行它.或者您运行以下内容:
EXEC master.dbo.fn_blah
Run Code Online (Sandbox Code Playgroud)
以前有人见过这种行为吗?任何帮助表示赞赏.谢谢!
该master数据库是存储各种关于你的服务器上的一切信息系统数据库.
将用户对象放入时master,您可以在没有数据库上下文的情况下访问它们.
这实际上是非预期的行为 - 引擎将在检查当前数据库上下文之前检查master中的某些对象(取决于对象名称和SQL Server的版本).
这是一个非常糟糕的主意,而不是设计流程的东西.可能会出现各种各样的问题,尤其是在升级或重新启动服务器时,master中的那些对象会被覆盖,因为master不是用来存储用户对象的!
总之,不要这样做! 使用三部分名称进行函数调用.
| 归档时间: |
|
| 查看次数: |
3080 次 |
| 最近记录: |