Sql server 使用sp_MSforeachdb和如何在ASC中排序DBName排除空白记录
我在SQLServer2008R2中工作 我需要找到在我工作的服务器中的数据库中定义了SQL Server(DBSQLSERVER)的位置。我能够在另一个网站上找到一篇老帖子来做这件事,但是有几个问题需要解决Sql server 使用sp_MSforeachdb和如何在ASC中排序DBName排除空白记录,sql-server,tsql,Sql Server,Tsql,我在SQLServer2008R2中工作 我需要找到在我工作的服务器中的数据库中定义了SQL Server(DBSQLSERVER)的位置。我能够在另一个网站上找到一篇老帖子来做这件事,但是有几个问题需要解决 SET NOCOUNT ON; DECLARE @text NVARCHAR(128) DECLARE @sql NVARCHAR(MAX) SET @text = @@SERVERNAME; SET @sql = 'USE [?] SELECT ''?'' [DBNam
SET NOCOUNT ON;
DECLARE @text NVARCHAR(128)
DECLARE @sql NVARCHAR(MAX)
SET @text = @@SERVERNAME;
SET @sql =
'USE [?]
SELECT ''?'' [DBName], @@SERVERNAME AS [Server], o.name AS [ObjName], o.type_desc [TypeDesc]
FROM sys.sql_modules m
INNER JOIN sys.objects o
ON m.object_id = o.object_id
WHERE m.definition Like ' + CHAR(39) + '%' + @text + '%' + CHAR(39) + '
ORDER BY 1, 3 asc'
EXEC sp_MSforeachdb @sql;
我有两个问题:
谢谢 空结果集来自没有与where谓词匹配的对象的数据库。至于排序,您必须记住,您正在使用此处的光标滚动每个数据库。这不是你能控制的。但是,在查询中,您有一个order by。我强烈建议您按列名而不是顺序排列。它的用法已被弃用,从多个角度使用它很有挑战性。
sp_MSforeachdb
不返回单个记录集。它为每个数据库返回一个记录集。因为空记录集是有效的记录集,所以不返回结果的数据库仍然显示“空白”记录。这也回答了为什么您的结果不有序。它们是在每个记录集中订购的。嘿,伙计们,谢谢你们的回复。培根片-谢谢你的清晰和简洁的解释,因为这真的很有帮助。有没有办法防止显示空记录集?再次感谢。你不能只隐藏空的结果集。想想这里发生了什么。您正在对每个数据库执行查询。即使没有行,该查询也将执行并成为结果集。您可以创建一个临时表来保存每次选择的结果,并将动态sql插入到该临时表中。这样,当没有行要返回时,就不会有行了。谢谢肖恩。感谢您的回复和解释。