Estou enfrentando um comportamento estranho.
Veja como reproduzir: em uma instância com vários bancos de dados (SQL Server 2016 no meu caso), crie esse procedimento armazenado ( master
no meu caso):
create procedure dbo.Strange WITH EXECUTE AS owner
as
begin
exec sp_MSforeachdb 'select''?''';
end;
Em seguida, chame esse procedimento armazenado com:
Exec master.dbo.Strange
Como você verá, ele retornará apenas dados para alguns dos bancos de dados, mas não para todos (3 de 11 no meu caso).
O que está acontecendo?
sp_MSforeachdb tem muitos problemas conhecidos .
Se você seguir o link, verá um post de Aaron Bertrand que os detalha e também fornece uma solução alternativa.