我的SQL Server 2008已
现在我正在尝试添加此存储过程usp_RethrowError
(http://msdn.microsoft.com/en-us/library/ms179296.aspx),它会从try...catch..
返回一条消息SQL到我的服务器。
由于存储过程是一个常见的sp,我想在中央DB和所有客户端DB中使用它。我应该把它放在哪里?在中央或在每个客户端DB中复制它?
如果将存储过程放在客户端数据库的中心位置,是否存在任何问题或性能缺陷,我必须编写类似[central].dbo.usp_RethrowError
把它放在主数据库中怎么样?
非常感谢
答案 0 :(得分:2)
这个问题很大程度上取决于品味和具体情况。从另一个数据库调用过程没有性能影响。
我通常建议不要将存储过程放在主数据库中,并且通常保留存储过程供系统使用。
在某些情况下,复制程序是有意义的(例如,当您认为有可能最终将这些程序分成多个服务器时)。我经常将实用程序和函数放在名为utility的单独数据库中。
这使得维护比为每个数据库提供自己的副本更容易(如果我想添加功能或发现一个微妙的错误,只有一个地方可以更改代码),但它也避免了对master数据库的监管,并且使得当新服务器联机时,备份并迁移我的所有实用程序功能。
答案 1 :(得分:1)
这取决于您的客户端数据库是否必须移动服务器,而不需要其他数据库。
将客户端数据库移动到另一个不包含central
数据库的服务器将导致抛出错误。所以在这种情况下,我会将存储过程添加到每个数据库中。
如果数据库永远不会单独移动到另一台服务器,那么我会将存储过程添加到master
数据库。
答案 2 :(得分:1)
除了其他注意事项,您可能还想查看使用synonym。这样,您可以为常用过程[central]创建一个集中式数据库,但让您的代码指向这些过程的同义词。将来,如果您需要转移到自包含版本,请将集中式转发移动到本地数据库,然后删除同义词。