我有几个数据库。我想列出database/security/users文件夹中的所有用户,user1和user2,如下所示:
我提出了这个问题:
SELECT name, type_desc
FROM nameOfMyDatabase.sys.database_principals
WHERE name NOT LIKE 'public'
AND name NOT LIKE 'dbo'
AND name NOT LIKE 'guest'
AND name NOT LIKE 'INFORMATION_SCHEMA'
AND name NOT LIKE 'sys'
AND name NOT LIKE 'db%';
它返回我需要的用户,除了数据库中的默认用户。
现在我需要一个查询,它可以对我拥有的所有数据库执行此操作,而不必知道它们的名称或任何关于它们的信息。
我找到了 sp_MSforeachdb
,但不建议多个网站在线使用。但如果这是我唯一的选择,它是怎么工作的?如何在查询的sql语法中引用当前数据库(假设它像一种for each循环一样工作?)
EXEC sp_MSforeachdb 'USE ? SELECT name, type_desc
FROM ''?''.sys.database_principals
Where name not like "public"
and name not like "dbo"
and name not like "guest"
and name not like "INFORMATION_SCHEMA"
and name not like "sys
and name not like "db%"'
(在这段代码中,我使用“”?“”作为对当前数据库的引用,但它返回错误)此外,我只希望在我创建的数据库上运行查询,而不希望在生成的系统数据库(master、model、msdb、tempdb)上运行查询
除了sp\u msforeachdb之外,还有别的方法可以让这个工作吗?
2条答案
按热度按时间smdncfj31#
请尝试以下操作
0pizxfdo2#
还有很多其他用户创建的版本
sp_msforeachdb
在外面。我将(无耻地)在这里使用我自己的版本,您可以在这里阅读更多内容:spu msforeachdb的无光标版本。为完整起见,我将包括以下ddl:如果需要,可以将其添加为系统对象;我在这篇文章中谈到了如何做。
输入后,可以进行查询,并根据需要输入替换字符: