我想为我的SQL Server 2008上的多个(甚至所有)数据库创建一个相同的存储过程。
我可以立即执行此操作,还是应该单独在asp.net项目参考数据库中创建它?
请帮助我.....
答案 0 :(得分:2)
这个问题已经多次被问过SO,但有趣的是,似乎没有就最佳答案达成共识。所以这里是各种人建议的主要选项的摘要(没有特别的顺序):
sp_
前缀的主数据库中,以便SQL Server首先在那里查找diff
数据库并应用diff脚本部署到其他数据库在我看来,1是非首发,因为Microsoft explicitly says您不应该在master数据库中创建对象。 2听起来不错但实际上数据库的恢复或复制比从头创建(YMMV)更频繁,因此使用模型是不可靠的。
3和4适用于表和视图,但执行上下文可能是存储过程和函数的问题。但这取决于程序中的逻辑,并且在您的情况下可能是可行的。
但是1-4都存在潜在的问题,如果你只有一个对象,那么你只有一个版本的对象,并且在不同的数据库中提供不同的版本,测试或仅针对不同的客户通常很有用。
5和6是同一主题的变体,我个人认为这是最好的方法,因为部署是你必须要解决的问题,所以你不妨这样做,并确保你拥有知识,工具和这些流程能够以受控制的自动化方式将代码干净,快速地部署到任何数据库。
答案 1 :(得分:0)
在master数据库或不会删除的数据库中创建存储过程。将参数传递给存储过程,该存储过程用于标识要在哪个数据库中获取数据,并相应地完成其余工作。