1

我需要创建一个视图或表值函数,该函数从针对动态数据库列表(存储在表中)运行的查询中返回一个结果集。所有数据库都具有相同的结构,并且 view/tvf 应该包含等效于对 databases_table 中每个数据库的联合所有查询。所有这一切的总体情况是,我需要通过 ODBC 获得此查询的结果。

在网上看了很多之后,我想出了一些潜在的解决方案,但没有一个完全符合我想要完成的目标。

我研究的第一件事是为每个不同的数据库选择一个视图,所有这些都结合在一起。这工作得很好,除了它离我想象的可维护性还很远。我将有 25-100 个此类多数据库查询,所有这些查询都必须针对不断变化的数据库集运行。

我仍在考虑可能使用这种方法,并制作一个存储过程来为我动态创建视图,但这仍然不是很有用,因为我被要求让整个过程免提。这样做需要有人在我们尝试通过 ODBC 连接到视图之前触发视图更新。如果可能的话,我想避免这种情况。

我研究的第二件事让我更接近我需要的东西。我使用了 sp_msforeachdb 存储过程,检查了数据库是否在列表中,如果是,我将查询结果添加到表变量中。这工作得很好,但问题是动态 sql 使我无法将它包装到表值函数或视图中......

Declare @RETURNTABLE Table(variable1 varchar(20), variable 2 varchar(30))  
INSERT INTO @RETURNTABLE 
exec sp_msforeachdb 'IF "?" IN (SELECT DatabaseName FROM DatabaseList) BEGIN     SELECT "?" [DatabaseName], variable1 , variable2 from [?].dbo.myTable END'  
SELECT * FROM @DBINFO

从 ms ssms 的查询运行它时,这非常有效,但正如我所说,将它放入 veiw 或 tvf 已证明超出了我的能力。据我所知,动态 SQL 排除了 tvf 的使用,并且视图无法使用变量。

有什么方法可以通过 ODBC 使上述代码的结果可用。有没有我想念的替代解决方案?

4

1 回答 1

2

据我所知,使用动态 SQL 的存储过程是您唯一的选择。

于 2011-10-31T17:26:59.463 回答