SQL Server:从不同的数据库收集数据



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

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

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

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

我应该补充一点,WHERE应该经过定制,以排除服务器上的任何其他数据库。另一种选择是保留一个有适当定义的表格。

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)

您可以通过以下查询获得所有数据库的列表:

SELECT name 
FROM master.dbo.sysdatabases

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

相关内容

  • 没有找到相关文章

最新更新