Tsql 在Sybase中的存储过程中使用大量位置的变量作为表名

Tsql 在Sybase中的存储过程中使用大量位置的变量作为表名,tsql,sybase,Tsql,Sybase,我有一个将记录从源数据库归档到目标数据库的过程,其中源数据库中的表在目标数据库中镜像。因此,在指定表名时,还必须完整地指定数据库名,如下所示: DB_NAME.dbo.TABLE_NAME 但是,我还必须在不同的环境之间移动此存储过程,其中相应的数据库的名称不同 例如: 开发人员: 质量保证: 我可以使用SHELL脚本从环境变量中获取这些DB名称,并将它们传递到存储过程中。但是,TSQL不允许数据库名称使用变量 我有一个解决方案,我基本上只是将整个脚本转换成一个字符串,并使用动态SQL运行ex

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

DB_NAME.dbo.TABLE_NAME
但是,我还必须在不同的环境之间移动此存储过程,其中相应的数据库的名称不同

例如:

开发人员:

质量保证:

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

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

是否推荐我的解决方案?还有其他解决办法吗


谢谢。

创建同义词怎么样?并在存储过程中使用同义词。然后,每个环境可以不同地定义这些相同的同义词


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

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

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


或者在这种情况下您必须使用SP吗?这听起来不像是在利用SPs的一个主要优势:优化一次并多次运行,从而节省了发表意见的时间。在这种情况下,请使用shell脚本或perl脚本来执行任务,并提供命令行参数/config file/environment vars来说明哪些数据库。

为什么不能只使用dbo.TABLE_NAME而不是DB_NAME.dbo.TABLE_NAME?您是否在存储过程中引用了多个数据库?@ClearLogic,是的,我在同一存储过程中引用了两个数据库。
DEV_DB_NAME.dbo.TABLE_NAME
QA_DB_NAME.dbo.TABLE_NAME