【发布时间】:2022-01-22 18:50:20
【问题描述】:
我想将此查询的输出合并到一个表中,我应该使用 join/union 还是其他什么?
DECLARE @name VARCHAR(1000)
DECLARE db_cursor CURSOR FOR
SELECT name FROM MASTER.dbo.sysdatabases
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
select getdate() as [Date Time], DEFAULT_DOMAIN()[Domain], SERVERPROPERTY('MachineName') AS Server,@@servername as [Instance],@name AS [Database], *
from sys.sysprocesses
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
【问题讨论】:
-
SQL Server 2012
-
合并如何?在询问 SQL 问题时,minimal reproducible example 是一个很好的开始。
-
您是否认为上述查询将遍历您实例上的每个数据库?它不会。实际上,它将多次对 same 数据库运行相同的查询;一次用于您拥有的数据库数量,但查询的数据库不会有所不同。
-
另外,你为什么使用
sys.sysprocesses和sys.sysdatabases?这些表是为了与 SQL Server 2000 数据库兼容。见documentation -
为什么要使用游标(或任何循环)来执行此操作?仅使用单个查询要容易一个数量级(并且更快)。哎呀,内部查询中甚至没有
WHERE子句,所以它只会在每个“行”中返回相同的内容。
标签: sql sql-server-2012 database-cursor