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

时间:2016-07-24 20:41:57

标签: sql-server database stored-procedures consolidation

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

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

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

2 个答案:

答案 0 :(得分:1)

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

tableView.beginUpdates()
tableView.endUpdates()

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

答案 1 :(得分:1)

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

我应该补充一点,WHERE应该被定制为排除服务器上的任何misc数据库。另一种选择是维持一个具有适当定义的表格。

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)