我要做的是验证网址。我只需要能够从我们当前在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"'
我注意到它没有选择所有数据库,但是它也选择了主表以及其他系统表,并且我认为这可能是它没有选择所有表的原因。有没有办法排除系统相关的表?
答案 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
)。