28

我正在使用 ms sql 2008 并尝试创建一个引用另一个数据库的数据库名称。例如,“Dev”、“Test”、“Demo”是我可以从多个配置文件中引用的数据库名称,但每个名称都指向另一个数据库,例如“db20080101”或“db20080114”。

[编辑]一些配置用于我控制代码的应用程序,而另一些则不是(例如 MS Reporting 服务数据源文件配置)[/Edit]

似乎 sqlserver 只支持 View、Table、Sproc 或 Function 的同义词。Alias 用于表名和列名。

有没有办法做到这一点,我在文档中错过了?有人对解决方法有任何建议吗?

4

4 回答 4

4

在表格中使用 3 部分符号和别名,例如

select * from tempdb.dbo.sysobjects a
join master.dbo.sysobjects b on a.id = b.id
于 2009-01-14T18:31:46.720 回答
2

有一种方法可以使用链接服务器来模拟这一点。这假设您有两个 SQL 服务器,它们具有相同的数据库集,一个用于开发/测试,一个用于实时。

  1. 在您的开发/测试服务器上打开 SQL Server Management Studio
  2. 右键单击服务器对象 > 链接服务器
  3. 选择新建链接服务器...
  4. 选择常规页面
  5. 在链接服务器字段中指定别名- 这通常是您的实时服务器的名称
  6. 选择 SQL Native Client 作为提供者
  7. 输入sql_server作为产品名称
  8. 在数据源中指定开发服务器的名称
  9. 添加安全和服务器选项以品尝
  10. 点击确定

以上适用于 SQL Server 2005,但对于 2008 应该类似

完成后,您可以像这样编写 SQL:

SELECT * FROM liveservername.databasename.dbo.tablename

现在,当您的脚本在开发服务器上运行并且链接服务器返回到自身时,它们将正确地从开发服务器中提取数据,并且当完全相同的脚本在实时服务器上运行时,它们将正常工作。

于 2011-12-20T14:05:11.420 回答
1

我使用另一个配置文件做了类似的事情。

新的配置文件将您的通用名称映射到连接到该数据库所需的所有信息(数据库名称、用户名、密码等),然后您的连接函数将您的通用名称作为参数。

数据库配置:

DEV_DB_NAME = db20080101
DEV_DB_USER = dev_user
DEV_DB_PASS = dev_pass
TEST_DB_NAME = db20070101
TEST_DB_USER = test_user
TEST_DB_PASS = test_pass

连接代码:

db_connection get_connection(string prefix) {
    db_connection db_conn = new db_connection;
    string db_name = get_config_value(config_path, prefix + "_DB_NAME");
    string db_user = get_config_value(config_path, prefix + "_DB_USER");
    string db_pass = get_config_value(config_path, prefix + "_DB_PASS");

    db_conn.connect(db_name, db_user, db_pass);

    return db_conn;
}

然后,您只需使用您的 db 别名作为参数调用 get_connection() 。

于 2009-01-14T18:42:01.460 回答
0

我知道这可能不会在所有情况下都有帮助,但您仍然可以选择使用视图。您可以在视图中插入、删除、更新、选择,只要它具有正确的标识键(主键)。如果将其指向另一个数据库,则应删除并重新创建以获取不同的架构(以防您在生产和测试之间工作,同时在测试和/或生产中更改架构。

当您要去另一个数据库并有一个 3 或 4 个部分的名称时,同义词很有用,但是当您想要使它具有一个集合名称时,一个链接服务器也可以工作,它可以让您使用一个固定的名称如果两个数据库中的表名相同,并且您只是在 prod 和 test 之间指向。

于 2014-12-15T22:04:48.610 回答