gpt4 book ai didi

c# - 有什么方法可以在 sql server 中将数据库名称设置为全局名称?

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:31 24 4
gpt4 key购买 nike

我有两个数据库,如下所述:

  • [QCR_DEV]
  • [QCR_DEV_LOG]

所有应用程序数据都存储在 [QCR_DEV] 中。在[QCR_DEV]的每个表上,都有一个触发器将[QCR_DEV]表的插入和更新细节插入到[QCR_DEV_LOG]中数据库。

假设我在[QCR_DEV] 数据库中有一个表[party]。每当我插入、更新或删除表中的某些记录时。将在 [QCR_DEV_LOG] 数据库中的表 [party_log] 中插入一个。简而言之,我将在 [QCR_DEV] 的表上执行的日志或操作保存到 [QCR_DEV_LOG] 数据库中。

当我们通过应用程序连接到数据库时,它使用连接字符串以某种方式连接到数据库。在我的存储过程中,我没有使用像这样的数据库名称:

Select * From [QCR_DEV].[party];

我是这样使用的:

Select * From [party];

这是因为,如果我需要更改数据库名称,那么我只需要更改连接字符串。

现在进入正题,我需要从 [QCR_DEV_LOG] 数据库中获取数据。我正在编写一个存储过程,其中我需要从两个数据库中获取数据,例如:

Select * From [QCR_DEV_LOG][party_log]
INNER JOIN [person] on [person].person_id = [QCR_DEV_LOG][party_log].person_id
where party_id = 1

此存储过程在 [QCR_DEV] 数据库中。我需要从两个数据库中获取数据。为此,我需要在查询中提及数据库名称。我不想要这个。有什么方法可以全局设置数据库名称并在我的查询中使用这个名称,这样如果将来我需要更改数据库名称,我只会从全局设置的位置进行更改。有什么办法吗?

最佳答案

我会支持 Jeroen Mostert评论和使用同义词:

CREATE SYNONYM [party_log] FOR [QCR_DEV_LOG].[dbo].[party_log];

当目标数据库被重命名时,这个查询会生成一个迁移脚本:

SELECT 'DROP SYNONYM [' + name + ']; CREATE SYNONYM [' + name + '] FOR ' + REPLACE(base_object_name, '[OldLogDbName].', '[NewLogDbName].') + ';'
FROM sys.synonyms
WHERE base_object_name LIKE '[OldLogDbName].%';

关于c# - 有什么方法可以在 sql server 中将数据库名称设置为全局名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40786915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com