2

我想要做的是验证一个 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"'

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

4

1 回答 1

0

如果数据库的数量(和名称)是固定的,那么您可以简单地执行以下操作:

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

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

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

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

于 2013-03-16T03:07:32.400 回答