2013-02-12 85 views
0

我在两个测试数据库中有许多表。第一个数据库是最新的,第二个是一年前的快照。 我有一些存储过程悬挂第一分贝,也参考第二。SQL Server 2008存储过程环境变量

我的问题是,我应该使用什么方法,以便我在转入生产时不必修改存储的特效。

如果这是一个编码问题,我会使用环境变量。什么是我的选择与SQL Server 2008.

谢谢。

+0

“我应该使用什么方法” - 标准更改控制... – 2013-02-12 10:09:17

回答

1

有点难理解你的问题,有些更多细节会有所帮助。

可能你的存储过程不应该被绑定到特定的数据库,它们应该是什么? 如果不是,我会建议删除对特定数据库的引用。

我们在我们公司使用多数据库存储程序&触发器。根据生产系统的不同,数据库名称可能会更改。 当我们安装或升级数据库时,我们使用与DB无关的SQL安装脚本,数据库被标识为特定的变量关键字,然后我们使用sed-like脚本,发现&用数据库名称替换数据库名称变量T-SQL,然后我们应用特定于DB的T-SQL脚本。它对任何生产数据库来说都很简单,快速且便于携带,而不替换关键字的T-SQL无效(这样我就可以在不替换数据库名称关键字的情况下执行)。

但是,这是一个非常特殊的情况,我很少听说有关跨数据库存储过程,它使系统和权限管理非常复杂。

我没有看到使用环境变量的重点,这可能是压倒性的,你必须在执行它们之前建立你的请求作为字符串,这是不被推荐的。在任何情况下,你都必须重写你的存储过程。

这是我在Stack Overflow上的第一个答案。我希望这个答案有帮助。

问候。

+0

感谢Loic,我将研究脚本迁移。你可能猜到我对此很新颖。如何创建未绑定到数据库的存储过程? – 2013-02-12 10:53:52

+0

一个存储过程不需要包含数据库的名称。要设置过程,您只需将T-SQL执行到您想要过程的数据库上。数据库可以在“CREATE PROCEDURE”块(定义存储过程)之前由USE语句和GO语句指定。如果省略数据库USE语句,则您的存储过程将在您当前连接到的数据库上创建。 – Loic 2013-02-12 11:23:30