aza*_*zad 6 t-sql database sql-server
我试图理解如何使用别名来引用同一实例中的另一个数据库,而不必使用硬编码名称.
方案如下:
我有一个带有存储数据的数据db,一个审计数据库,用于保存所有更改.由于各种原因,我希望将审计数据保存在一个单独的数据库中,这不仅仅是因为它可能会变得非常大并且出于报告目的.
在数据db中,我不想通过硬编码名称引用它,而是别名,以便在不同的环境中,我不必更改名称和各种sp来引用新名称.
例如:
mydevdata
mydevaudit
Run Code Online (Sandbox Code Playgroud)
如果存在SP mydevdata如它调用mydevaudit,我不希望当我去测试,其中分贝的可称为改变SP mytestdata和mytestaudit.同样,由于各种原因,数据库名称可以更改,更多地与空格和实例等有关.
所以,如果我有以下程序mydevdata:
proc A
begin
insert into mydevaudit.table.abc(somecol)
select 1
end
Run Code Online (Sandbox Code Playgroud)
当我去测试时,我不想改变程序来引用另一个名字,(假设为了发生的论证)
相反,我希望做的事情如下:
proc A
begin
insert into AUDITEBALIAS.table.abc(somecol)
select 1
end
Run Code Online (Sandbox Code Playgroud)
我有兴趣了解如何做到这样的事情,以及职业和缺点.
此外,dymnamic SQL不是一个选项.
在此先感谢您的帮助.
gbn*_*gbn 12
您可以使用同义词
CREATE SYNONYM WholeTableAliasWithDBetc FOR TheDB.dbo.TheTable
Run Code Online (Sandbox Code Playgroud)
这意味着本地数据库中的所有对象引用都是该数据库的本地对象,但隐藏其他数据库的同义词除外.
您还可以在审计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, ...
Run Code Online (Sandbox Code Playgroud)
显然,您可以更改module_name_var以使用您喜欢的任何数据库
| 归档时间: |
|
| 查看次数: |
11203 次 |
| 最近记录: |