我如何为此使用 EXECUTE 命令?

How can I use the EXECUTE command for this?

我们有一个 SQL Server 2014,有大约 20 多个链接(oracle)服务器。 有时,我需要检查所有这些链接服务器的用户 ID(在 Oracle 端)状态。

我目前为此使用以下 OPENQUERY 语句:

SELECT * FROM OPENQUERY (MYLINKEDORACLESERVER,'SELECT * FROM SYS.USER_USERS')

输出:

但是,由于服务器的数量,我们正在寻找一种更自动化的方式来执行此操作。

SYS.SERVERS 输出所有链接的 oracle 服务器的列表(我添加了 OPENQUERY 语法)

SELECT 'select * from openquery ('+ name +',''SELECT * FROM USER_USERS'')' FROM sys.servers 
WHERE provider='OraOLEDB.Oracle'

输出:

如何利用 EXECUTE 语句使其自动执行它输出的每个 OPENQUERY 语句?

期望的输出:

一种方法是对它们进行字符串聚合,然后在一个批次中执行它们。由于您不在 SQL Server 2017+ 中,因此您将使用旧的 FOR XML PATH 方法:

DECLARE @SQL nvarchar(MAX),
        @CRLF nchar(2) = NCHAR(13) + NCHAR(10);

SET @SQL =  STUFF((SELECT @CRLF + N'SELECT * FROM OPENQUERY('+ QUOTENAME(s.[name]) + ',''SELECT * FROM USER_USERS'');'
                   FROM sys.servers 
                   FOR XML PATH(N''),TYPE).value('(./text())[1]','nvarchar(MAX)'),1,2,N'');

PRINT @SQL; --Your best friend
EXEC sys.sp_executesql @SQL;