引用服务器中所有数据库的存储过程

时间:2012-06-22 11:32:19

标签: asp.net sql-server-2008

我想为我的SQL Server 2008上的多个(甚至所有)数据库创建一个相同的存储过程。

我可以立即执行此操作,还是应该单独在asp.net项目参考数据库中创建它?

请帮助我.....

2 个答案:

答案 0 :(得分:2)

这个问题已经多次被问过SO,但有趣的是,似乎没有就最佳答案达成共识。所以这里是各种人建议的主要选项的摘要(没有特别的顺序):

  1. 将其放在带有sp_前缀的主数据库中,以便SQL Server首先在那里查找
  2. 将其放入模型数据库中,以便自动添加到所有新数据库
  3. 仅为“全局”程序(和其他对象)创建数据库,并使用三部分命名来调用它们
  4. 作为3,但在其他数据库中创建同义词,因此您不需要三部分命名
  5. 使用商业或自行开发的工具来管理多个数据库的部署
  6. 作为5,但部署到一个数据库,然后diff数据库并应用diff脚本部署到其他数据库
  7. 在我看来,1是非首发,因为Microsoft explicitly says您不应该在master数据库中创建对象。 2听起来不错但实际上数据库的恢复或复制比从头创建(YMMV)更频繁,因此使用模型是不可靠的。

    3和4适用于表和视图,但执行上下文可能是存储过程和函数的问题。但这取决于程序中的逻辑,并且在您的情况下可能是可行的。

    但是1-4都存在潜在的问题,如果你只有一个对象,那么你只有一个版本的对象,并且在不同的数据库中提供不同的版本,测试或仅针对不同的客户通常很有用。

    5和6是同一主题的变体,我个人认为这是最好的方法,因为部署是你必须要解决的问题,所以你不妨这样做,并确保你拥有知识,工具和这些流程能够以受控制的自动化方式将代码干净,快速地部署到任何数据库。

答案 1 :(得分:0)

在master数据库或不会删除的数据库中创建存储过程。将参数传递给存储过程,该存储过程用于标识要在哪个数据库中获取数据,并相应地完成其余工作。