Sql 在多个Dbs查询中运行脚本返回错误
我正在使用Sql 在多个Dbs查询中运行脚本返回错误,sql,sql-server-2012,Sql,Sql Server 2012,我正在使用spmsforeachdb存储过程运行一个查询。我使用了服务器实例中的三个数据库:ExcelineDev、EXCE_NR1和EXCE_AKI declare @t table (dbname varchar(50),ss varchar(max),sss varchar(max)) DECLARE @command varchar(max) SELECT @command = 'IF ''?'' IN (''ExcelineDev'',''EXCE_NR1'',''EXCE_AKI'
spmsforeachdb
存储过程运行一个查询。我使用了服务器实例中的三个数据库:ExcelineDev、EXCE_NR1和EXCE_AKI
declare @t table (dbname varchar(50),ss varchar(max),sss varchar(max))
DECLARE @command varchar(max)
SELECT @command = 'IF ''?'' IN (''ExcelineDev'',''EXCE_NR1'',''EXCE_AKI'')
BEGIN USE ?
EXEC
(''
select DB_NAME(DB_ID()), category,name from usrpt.report
where name like ''''%leders%''''
'')
END'
print @command
insert into @t
EXEC sp_MSforeachdb @command
select * from @t
我得到以下错误:
'Msg 911,16级,状态1,第2行数据库'Migration\u Release\u 1'
不存在。请确保输入的名称正确。”
我很困惑,因为在我的服务器实例中没有名为“Migration\u Release\u 1”的数据库。SQL为什么要搜索此数据库?我们没有在那里传递变量。它的行为类似于DB变量运行此命令:
从master.dbo.sysdatabases中选择名称
。该结果集中是否有任何迁移发布数据库的条目?没有。我运行了它并进行了检查…我认为这是由于在不关闭所有连接的情况下删除了迁移发布数据库…我的建议是调出sp_MSForEachDB过程的文本并手动遍历它,直到您确定哪个查询正在获取该数据库价值也许查询结果是缓存的,可以消除这个问题。