存储过程中的 sp_msforeachdb 不能正常工作

Dom*_*her 3 sql-server sql-server-2016

我正面临奇怪的行为。

以下是重现方法:在具有多个数据库的实例(在我的情况下为 SQL Server 2016)中,创建该存储过程(master在我的情况下):

create procedure dbo.Strange WITH EXECUTE AS owner
as
begin
    exec sp_MSforeachdb 'select''?''';
end;
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令调用该存储过程:

Exec master.dbo.Strange
Run Code Online (Sandbox Code Playgroud)

正如您将看到的,它只会返回某些数据库的数据,而不是全部(在我的例子中是 11 个中的 3 个)。

怎么了?

Eri*_*ing 13

sp_MSforeachdb 有很多已知问题

如果您点击链接,您将看到 Aaron Bertrand 的一篇文章,其中详细介绍了它们,并提供了替代解决方案。