如何为数据库名称创建Sql同义词或“别名”?

时间:2009-01-14 18:29:19

标签: sql sql-server-2008 alias synonym

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

[编辑]有些配置是针对我控制代码的应用程序而有些则不是(例如MS报告服务数据源文件配置)[/编辑]

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

有没有办法在文档中遗漏这些内容? 任何人对解决方法都有任何建议吗?

4 个答案:

答案 0 :(得分:4)

使用3部分表示法和别名直到表格,例如

select * from tempdb.dbo.sysobjects a
join master.dbo.sysobjects b on a.id = b.id

答案 1 :(得分:1)

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

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

db.config:

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()。

答案 2 :(得分:1)

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

  1. 在开发/测试服务器上打开SQL Server Management Studio
  2. 右键单击“服务器对象”>链接服务器
  3. 选择新建链接服务器...
  4. 选择常规页面
  5. 在链接服务器字段中指定别名名称 - 这通常是实时服务器的名称
  6. 选择SQL Native Client作为提供程序
  7. 输入 sql_server 作为产品名称
  8. 在数据源中指定开发服务器
  9. 的名称
  10. 添加安全性和服务器选项以品味
  11. 点击确定
  12. 以上内容适用于SQL Server 2005,但在2008年应该类似

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

    SELECT * FROM liveservername.databasename.dbo.tablename
    

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

答案 3 :(得分:0)

我知道这可能无助于所有情况,但您仍然可以选择使用视图。只要具有正确的身份密钥(主键),您就可以插入,删除,更新,选择视图。如果您将其指向另一个数据库,则应删除并重新创建以获取不同的模式(以防您在生产和测试之间进行工作,同时在测试和/或生产中更改模式。

当您进入另一个数据库且具有3或4个部分名称时,同义词非常有用,但是当您想要这样做时,您可以设置一个名称,链接的服务器也可以使用如果两个数据库中的表名相同,并且只是在prod和test之间进行指向,则使用固定名称。