2011-07-02 58 views
6

我想了解如何使用别名在同一实例中引用另一个数据库,而不必使用硬编码名称。SQL Server跨数据库别名

的情况是如下:

我有一个存储数据,审计数据库这使所做的所有更改数据分贝。出于各种原因,我想将审计数据保存在一个单独的数据库中,尤其是因为它可能会变得非常大并且用于报告目的。

在数据db中,我不想通过硬编码名称引用此名称,而是使用别名,以便在不同的环境中,我不必更改名称和各种sp以引用新名称。

例如:

mydevdata 
mydevaudit 

如果mydevdata存在SP如它调用mydevaudit,我不想当我去测试,其中分贝的可称为改变SP mytestdatamytestaudit 。再次,由于种种原因,该数据库的名称可以改变,更给实例做用空格等

所以,如果我在mydevdata程序:

proc A 
begin 

insert into mydevaudit.table.abc(somecol) 
select 1 

end 

,当我去考,我不想改变程序引用另一个名称,(承担便于讨论所发生)

相反,我希望做类似:

proc A 
begin 

insert into AUDITEBALIAS.table.abc(somecol) 
select 1 

end 

我我有兴趣了解我可以如何做这样的事情,以及专业和缺点。

此外,dymnamic SQL不是一个选项。

在此先感谢您的帮助。

+0

请你能否详细说明为什么“dymnamic SQL不是一个选项” – Seph

回答

11

您可以使用synonyms

CREATE SYNONYM WholeTableAliasWithDBetc FOR TheDB.dbo.TheTable 

这意味着在本地数据库中的所有对象的引用是局部的DB,除了从你隐藏其他数据库的同义词。

您还可以使用中的存储过程审计数据库。还有就是EXEC是很少使用的第三表单,您可以parametrise的存储过程的名称

DECLARE @module_name_var varchar(100) 
SET @module_name_var = 'mydevaudit.dbo.AuditProc' 
-- SET @module_name_var = 'whatever.dbo.AuditProc' 
EXEC @module_name_var @p1, @p2, ... 

很明显,你可以改变module_name_var使用任何DB你喜欢

0

我刚刚张贴这How to create Sql Synonym or "Alias" for Database Name?哪些是相同情况的解决方法:

有一种方法可以使用链接的服务器来模拟此操作。这假定您有两台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 

现在,当你的脚本与链接服务器开发服务器上运行回到自身,他们将正常工作从开发服务器提取数据和当在实时服务器上运行完全相同的脚本时,它们将正常工作。

相关问题