0

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

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

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

4

2 回答 2

1

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

SELECT name 
FROM master.dbo.sysdatabases

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

于 2016-07-24T20:52:23.813 回答
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)
于 2016-07-24T21:18:34.010 回答