加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Server跨数据库别名

发布时间:2020-12-12 16:19:39 所属栏目:MsSql教程 来源:网络整理
导读:我试图理解如何使用别名来引用同一实例中的另一个数据库,而不必使用硬编码名称. 方案如下: 我有一个带有存储数据的数据db,一个审计数据库,用于保存所有更改.由于各种原因,我希望将审计数据保存在一个单独的数据库中,这不仅仅是因为它可能会变得非常大并且出
我试图理解如何使用别名来引用同一实例中的另一个数据库,而不必使用硬编码名称.

方案如下:

我有一个带有存储数据的数据db,一个审计数据库,用于保存所有更改.由于各种原因,我希望将审计数据保存在一个单独的数据库中,这不仅仅是因为它可能会变得非常大并且出于报告目的.

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

例如:

mydevdata
mydevaudit

如果mydevdata中存在sp,例如调用mydevaudit的sp,那么当我去测试db的名称mytestdata和mytestaudit时,我不想更改sp.同样,由于各种原因,数据库名称可以更改,更多地与空格和实例等有关.

所以如果我在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不是一个选项.

在此先感谢您的帮助.

解决方法

您可以使用 synonyms
CREATE SYNONYM WholeTableAliasWithDBetc FOR TheDB.dbo.TheTable

这意味着本地数据库中的所有对象引用都是该数据库的本地对象,但隐藏其他数据库的同义词除外.

您还可以在审计DB中使用存储过程.有一个EXEC的第三种形式很少使用,您可以参数化存储的proc名称

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来使用你喜欢的任何数据库

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读