我们有一个非常古老的软件,大约是10年前创建的,我们没有源代码.

该软件使用同一SQL Server 2012实例上的两个数据库(DB01DB02).

有一些SQL语句,比如db01..table1 join db02..table2,但主要问题是我们的进程不允许我们使用db02作为数据库的名称.

问题是:我们如何为数据库创建别名?

我试着用CREATE SYNONYM

CREATE SYNONYM [db02] FOR [db02_new_name];

但它不适用于数据库名称.

请建议如何在不修补二进制文件以更正SQL语句的情况下解决此问题.

推荐答案

使用要模拟的名称创建数据库.重新调整DDL代码生成器,为数据库中包含我需要通过硬编码名称访问的表的每个表创建一个视图.基本上,每个视图都有一个如下所示的语句.

CREATE VIEW schemaname.tablename as SELECT * FROM targetdbname.schemaname.tablename

示例:

硬编码的目标数据库名为ProdDBV1,源数据库名为ProductDatabaseDatabaseV1,模式名为dbo,表名为customer

  1. 使用SSMS或脚本创建名为ProdDBV1的数据库.
  2. CREATE VIEW dbo.customer as SELECT * FROM ProductDatabaseDatabaseV1.dbo.customer

如果您可以枚举"源"数据库中的每个表,然后如上所述创建DDL.如果您愿意,我可以用代码示例更新此帖子.(如果可能,使用sp_msforeachtable程序)

Database相关问答推荐

撤销语句释放类实例中可用的缓冲区

安装postgresql用于使用和调试Apache-AGE

如何在 SQL Server 中将索引从一个表复制到另一个表

MongoDB是面向对象的吗?

按请求的可变事务隔离级别

在一次 SQL 查询中更新多行的多列

Zend 框架 - 为什么我应该使用数据映射器/Db_Table_Row?

在 sql server 中存储持续时间(时间跨度)

内存数据库和磁盘内存数据库的区别

使用 jQuery 动态填写表单值

South migration error: NoMigrations exception for django.contrib.auth

在 SQL 数据库之间共享数据

自动增量唯一标识符

如何在远程服务器上备份 MySQL 数据库?

哪个提供更好的性能一个大连接或多个查询?

如何在 Postgres 9.6+ 中生成长度为 N 的随机、唯一的字母数字 ID?

如何在我的 SQL Server 代理作业(job)中创建一个将运行我的 SSIS 包的步骤?

数据库模式与数据库表空间?

处理多个表的最佳实践

将一行连接到另一个表中的多行