0

我有一个将源数据库中的记录归档到目标数据库中的过程,其中源数据库中的表在目标数据库中镜像。因此,我在指定表名时,还必须完整指定数据库名,如下:

DB_NAME.dbo.TABLE_NAME

但是,我还必须在环境之间移动这个存储过程,其中相应的数据库名称不同。

例如:

开发:

DEV_DB_NAME.dbo.TABLE_NAME

质量保证:

QA_DB_NAME.dbo.TABLE_NAME

我可以使用 SHELL 脚本从环境变量中获取这些 DB 名称并将它们传递到 SPROC。但是,TSQL 不允许数据库名称使用变量。

我有一个解决方案,我基本上只是将整个脚本变成一个字符串并exec使用动态 SQL 运行。

推荐我的解决方案吗?还有其他解决方案吗?

谢谢。

4

2 回答 2

0

如何创建同义词?并在存储过程中使用同义词。然后每个 Envorinment 可以不同地定义相同的同义词。

我希望 Sybase 中的同义词可以跨数据库定义,如 SQL Server 2008。

于 2012-09-05T19:24:24.563 回答
0

您可以使用 sqsh,这是一种 isql 替代方案,它允许您定义变量,就像 shell vars 一样,使您能够将相同的 DDL 安装到不同的数据库,并正确替换数据库名称等内容。

或者使用 shell 变量滚动您自己的变量,并在 shell 变量或临时文件中使用不同的 Sql 提供 isql。

还是在这种情况下您必须使用SP?这听起来不像是在利用 SP 的主要优势之一:优化一次并运行多次,从而节省优化时间。在这种情况下,使用 shell 脚本或 perl 脚本来完成您的任务,并提供命令行参数/配置文件/环境变量来说明哪些数据库。

于 2012-09-06T08:18:04.013 回答