运行 SQL 查询特定服务器名称
Running SQL query on specific server name
我目前正在 运行 在 SSMS 中执行以下查询,其中 运行 是具有以 AccountsLive
结尾的数据库的查询...无论如何也包含服务器名称还有吗?
例如,我希望下面的 运行 仅适用于以 ACCDB1
结尾的服务器名称。这完全可能吗?
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = STUFF(
(SELECT NCHAR (10) + N'UNION ALL' + NCHAR(10) + N'SELECT
LEFT('+ QUOTENAME(d.name, '''') + N', LEN('+ QUOTENAME(d.name, '''') + N') - 12) AS Office,
pt_copysupp COLLATE Latin1_General_CI_AS as S_Code
FROM ' + QUOTENAME(d.name) + '.dbo.pl_transactions'
FROM sys.databases d
WHERE NAME like '%AccountsLive'
FOR XML PATH(''), TYPE)
.value('text()[1]','nvarchar(max)'), 1, 11, '');
exec(@Sql);
查询sys.servers
得到名称以ACCDB1
结尾的链接服务器列表
select name
from sys.servers
where name like '%ACCDB1'
对于每个链接服务器 @server
,使用 OPENQUERY 在该服务器上执行您的查询 @Sql
。您将需要使用动态查询来形成 OPENQUERY
并执行它
declare @dsql nvarchar(max)
select @dsql = 'select * from OPENQUERY(' + QUOTENAME(@server) + ', ''' + @Sql + ''')'
print @dsql
exec sp_executesql @dsql
我目前正在 运行 在 SSMS 中执行以下查询,其中 运行 是具有以 AccountsLive
结尾的数据库的查询...无论如何也包含服务器名称还有吗?
例如,我希望下面的 运行 仅适用于以 ACCDB1
结尾的服务器名称。这完全可能吗?
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = STUFF(
(SELECT NCHAR (10) + N'UNION ALL' + NCHAR(10) + N'SELECT
LEFT('+ QUOTENAME(d.name, '''') + N', LEN('+ QUOTENAME(d.name, '''') + N') - 12) AS Office,
pt_copysupp COLLATE Latin1_General_CI_AS as S_Code
FROM ' + QUOTENAME(d.name) + '.dbo.pl_transactions'
FROM sys.databases d
WHERE NAME like '%AccountsLive'
FOR XML PATH(''), TYPE)
.value('text()[1]','nvarchar(max)'), 1, 11, '');
exec(@Sql);
查询sys.servers
得到名称以ACCDB1
select name
from sys.servers
where name like '%ACCDB1'
对于每个链接服务器 @server
,使用 OPENQUERY 在该服务器上执行您的查询 @Sql
。您将需要使用动态查询来形成 OPENQUERY
并执行它
declare @dsql nvarchar(max)
select @dsql = 'select * from OPENQUERY(' + QUOTENAME(@server) + ', ''' + @Sql + ''')'
print @dsql
exec sp_executesql @dsql