SQL服务器:从不同的数据库收集数据

SQL Server : gather data from different databases

我有许多不同的应用程序数据库 [Log] table。我有一个带有类似日志 table 的中央数据库,但有一个名为 TenantId 的额外列。还有一个 Tenant table 和一个 TenantId 和一个 DatabaseName 列。这些 DatabaseName 包含应用程序数据库的名称。

现在我想循环所有应用程序数据库并将日志条目复制到中央日志table,TenantId属于应用程序数据库名称。

是否可以在中央数据库中编写一个过程而不是在应用程序数据库中创建许多过程?所有数据库都在同一个 SQL 服务器实例上。

您可以使用以下查询获取所有数据库的列表:

SELECT name 
FROM master.dbo.sysdatabases

然后就可以使用游标获取每一个数据库的数据,并在当前数据库中插入一个table

只是一些快速的动态 SQL。在下面的示例中,CHINRUS 是我的中央数据库,因此将被排除在合并之外。

我应该补充一点,应该调整 WHERE 以排除服务器上的任何杂项数据库。另一种选择是维护一个具有正确定义的 table。

Declare @LogTable  varchar(100)='[Chinrus].[dbo].[TransactionLog]'
Declare @CentralDB varchar(100)='Chinrus'

Declare @SQL varchar(max) = ''

Select @SQL = @SQL + SQL
 From (
        Select Name,SQL=';Insert Into '+@LogTable+' Select *,TenantId='''+Name+''' From ['+Name+'].[dbo].[TransactionLog] '
         From  master.dbo.sysdatabases 
         Where Name<>@CentralDB
      ) A

Select @SQL
--Exec(@SQL)