从列加入动态数据库

时间:2014-03-13 16:21:46

标签: sql sql-server database

我有一个主数据库,其中有一个名为公司的表,其中包含一个名为 db_name 的列,其中包含该公司的数据库名称。

这些公司有多个具有相同结构的数据库。

在每个相同的数据库中都有一个名为action_log的表,其结构如下:

log_id | user_id | action_id

我想以某种方式运行查询以一起获取这些数据库中所有用户的活动。有没有办法与下面的例子类似?

select c.company_id, c.company_name, a.log_id, a.user_id, a.action_id
from master_db.dbo.companies c
    inner join [c.db_name].dbo.action_log a

1 个答案:

答案 0 :(得分:1)

编码以下算法。

1 - 创建一个游标以从master_db.dbo.companies中获取公司数据库名称。

2 - 对于每个数据库名称

A - 为'USE [DB]'创建动态sql,其中DB是公司数据库名称。

B - 添加分号以运行多个语句。附上上面的查询。

C - 执行查询。将结果插入表格中。

3 - 返回结果表。

您尝试使用 [c.db_name] .dbo.action_log ,语法将无效,因为在编译时,它无法解析括号[]中的项目。 / p>

您可以使用我的VLF程序作为起点。

http://craftydba.com/wp-content/uploads/2012/12/usp-monitor-vlfs.sql_.txt

Ĵ