0

我只想SELECT在某些特定数据库上运行语句。此查询返回数据库列表:

DECLARE @OneWeekAgo DATETIME
SELECT @OneWeekAgo = DATEADD(week,-1,GETDATE())

select distinct DB_NAME(database_id) DatabaseName 
into #temp
from sys.dm_db_index_usage_stats
where DB_NAME(database_id) like 'TTT[_][a-z]%'
  and DB_NAME(database_id) not like '%test%' 
  and last_user_update > @OneWeekAgo

现在在所有这些返回的数据库上,我想运行一个简单的查询:

SELECT * 
FROM TTT_Clients 
WHERE country like 'SWEDEN'

我怎么做?我在“IN(SELECT DISTINCT ...)”行中使用如下内容出现错误:

exec sp_msforeachdb ' use [?] IF  ''?'' in (select distinct DB_NAME(database_id) DatabaseName 
                                            from sys.dm_db_index_usage_stats
                                            where DB_NAME(database_id) like  ''TTT[_][a-z]%'' 
                                              and DB_NAME(database_id) not like ''%test%'') 
BEGIN
    SELECT * FROM TTT_Clients WHERE country like ''SWEDEN''
END
4

1 回答 1

1

您没有指定错误,我也不确定,但我猜sys.dm_db_index_usage_stats无论您使用什么数据库(服务器范围视图),它都会返回相同的信息。

我想你想要这样的东西......

exec sp_msforeachdb ' use [?];
IF ('[?]' NOT LIKE ''%test%'' AND EXISTS(SELECT * FROM sys.tables WHERE name LIKE ''TTT[_][a-z]%''))
BEGIN
    SELECT * FROM TTT_Clients WHERE country like ''SWEDEN''
END
'

重新使用您的过滤器,我不知道它们是否正确。基本上,我们正在检查数据库中是否存在相关表。由于您仅从中进行选择,TTT_Clients因此我建议您仅进行过滤WHERE name = ''TTT_Clients'',而不是仅匹配它的正则表达式。

于 2015-04-30T23:49:27.197 回答