我应该在SQL Server中放置常见的存储过程

时间:2011-12-12 17:34:30

标签: asp.net sql sql-server-2008 tsql

我的SQL Server 2008已

  1. 一个具有一些全局功能的中央数据库,例如映射到指定的客户端数据库。
  2. 50多个客户端数据库
  3. 主数据库..(默认为MS)
  4. 会话的ASPState。
  5. 现在我正在尝试添加此存储过程usp_RethrowError(http://msdn.microsoft.com/en-us/library/ms179296.aspx),它会从try...catch..返回一条消息SQL到我的服务器。

    由于存储过程是一个常见的sp,我想在中央DB和所有客户端DB中使用它。我应该把它放在哪里?在中央或在每个客户端DB中复制它?

    如果将存储过程放在客户端数据库的中心位置,是否存在任何问题或性能缺陷,我必须编写类似[central].dbo.usp_RethrowError

    的内容

    把它放在主数据库中怎么样?

    非常感谢

3 个答案:

答案 0 :(得分:2)

这个问题很大程度上取决于品味和具体情况。从另一个数据库调用过程没有性能影响。

我通常建议不要将存储过程放在主数据库中,并且通常保留存储过程供系统使用。

在某些情况下,复制程序是有意义的(例如,当您认为有可能最终将这些程序分成多个服务器时)。我经常将实用程序和函数放在名为utility的单独数据库中。

这使得维护比为每个数据库提供自己的副本更容易(如果我想添加功能或发现一个微妙的错误,只有一个地方可以更改代码),但它也避免了对master数据库的监管,并且使得当新服务器联机时,备份并迁移我的所有实用程序功能。

答案 1 :(得分:1)

这取决于您的客户端数据库是否必须移动服务器,而不需要其他数据库。

将客户端数据库移动到另一个不包含central数据库的服务器将导致抛出错误。所以在这种情况下,我会将存储过程添加到每个数据库中。

如果数据库永远不会单独移动到另一台服务器,那么我会将存储过程添加到master数据库。

答案 2 :(得分:1)

除了其他注意事项,您可能还想查看使用synonym。这样,您可以为常用过程[central]创建一个集中式数据库,但让您的代码指向这些过程的同义词。将来,如果您需要转移到自包含版本,请将集中式转发移动到本地数据库,然后删除同义词。