选择多个数据库的查询

时间:2012-10-29 18:01:37

标签: sql-server-2008-r2

我要做的是验证网址。我只需要能够从我们当前在SQL Server 2008中的所有数据库中选择单个值。所有数据库都是相同的,只是针对不同用户的同一数据库的多个实例。

我希望从每个数据库的一个表中提取一个项目。

每个数据库都包含一个表SETTINGS,并在该表中包含MapIconURL的值。我需要每个数据库中每个表的值。我正在查看大约30个具有此值的数据库。

所以我找到了“未记录的”存储过程sp_MsForEachDb并且已经工作......到了一定程度。
我正在使用的代码是:

EXEC sp_MsForEachDb 'use ?; SELECT "?" as databasename,SETTINGSKEYID, SECTION, NAME, INIVALUE, DESCRIPTION FROM ?.dbo.SETTINGS WHERE [NAME] = "MapIconURL"'

我注意到它没有选择所有数据库,但是它也选择了主表以及其他系统表,并且我认为这可能是它没有选择所有表的原因。有没有办法排除系统相关的表?

1 个答案:

答案 0 :(得分:0)

如果数据库的编号(和名称)是固定的,那么您可以这样做:

SELECT MapIconUrl FROM db1.dbo.SETTINGS
UNION ALL
SELECT MapIconUrl FROM db2.dbo.SETTINGS
...

但是,如果数据库的数量或名称​​未已修复,则必须动态构建查询。

首先,运行SELECT name FROM master..sysdatabases等查询以获取数据库的名称。

然后,遍历结果集(在T-SQL中,使用CURSOR)并构建查询并执行它(在T-SQL中,使用sp_executesql)。