SQL 服务器 2012- 使用 sp_msforeachdb
SQL Server 2012- Using sp_msforeachdb
我只想 运行 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
你没有指定错误,我不确定这一点,但我猜测 sys.dm_db_index_usage_stats
returns 相同的信息,无论你使用的是什么数据库(服务器广阔的视野)。
我想你想要这样的东西...
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
'
重新使用你的过滤器,我不知道它们是否正确。基本上我们正在检查数据库中是否存在有问题的 table。由于您只从 TTT_Clients
中选择,我建议只过滤 WHERE name = ''TTT_Clients''
而不是只匹配它的正则表达式。
我只想 运行 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
你没有指定错误,我不确定这一点,但我猜测 sys.dm_db_index_usage_stats
returns 相同的信息,无论你使用的是什么数据库(服务器广阔的视野)。
我想你想要这样的东西...
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
'
重新使用你的过滤器,我不知道它们是否正确。基本上我们正在检查数据库中是否存在有问题的 table。由于您只从 TTT_Clients
中选择,我建议只过滤 WHERE name = ''TTT_Clients''
而不是只匹配它的正则表达式。