【问题标题】:Select query on multiple databases在多个数据库上选择查询
【发布时间】:2013-03-16 11:07:32
【问题描述】:

我想要做的是验证一个 URL。我只需要能够从我们目前在 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"'

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

【问题讨论】:

  • 从 db1.dbo.SETINGS UNION 中选择 MapIconURL 全部从 db2.dbo.SETINGS 中选择 MapIconURL ...

标签: sql-server-2008-r2


【解决方案1】:

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

从 db1.dbo.SETTINGS 中选择 MapIconUrl 联合所有 从 db2.dbo.SETTINGS 中选择 MapIconUrl ...

但是,如果数据库的数量或名称​​不是固定的,那么您必须动态构建查询。

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

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

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2012-09-07
    • 2018-03-15
    • 2012-12-21
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    相关资源
    最近更新 更多