gpt4 book ai didi

sql - SQL Server OPENQUERY 中的括号标识符问题

转载 作者:行者123 更新时间:2023-12-04 20:44:08 25 4
gpt4 key购买 nike

不确定,这是否应该在 Stack Overflow 或 DBA 部分进行。

我正在编写的程序有问题。我有一个变量,可以说:

SET @name sysname --also tried to make as varchar

这在游标内部使用,并且基本上将包含 SQL Server 名称。几个服务器名称后跟实例名称。例如
DECLARE @name = 'SERVER1\INSTANCE1'

在游标内,我有这个查询。
SELECT @name, * FROM OPENQUERY(@name,
'SELECT
i.Name,
i.database_id,
b.mirroring_state

FROM msdb.sys.databases i
INNER JOIN msdb.sys.database_mirroring b
ON i.database_id = b.database_id
WHERE b.mirroring_state IS NOT NULL')

由于 \ 而不起作用内 @name
但是,如果我尝试此操作,它可以完美运行。
SELECT 'SERVER1\INSTANCE1', * FROM OPENQUERY([SERVER1\INSTANCE1],

我遇到的问题是尝试将带括号的标识符与 @name 一起使用在 OPENQUERY 里面。

我尝试了几种方法,包括 OPENQUERY('['+@name+']', 的各种组合。

如果您只是尝试 FROM OPENQUERY([@name], SQL Server 将其逐字解析为@name。

关于如何使用 servername\instance 的任何想法名字没有这些问题?

编辑,代码的完整部分:
 DECLARE @name sysname,
@sql nvarchar(4000)

DECLARE c1 CURSOR FOR
SELECT SUBSTRING (Servername, 2, LEN(Servername)-2)
FROM AllServers
OPEN c1
FETCH NEXT FROM c1
INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN

set @sql = 'INSERT INTO MirrorResults
SELECT ''[' + @name + ']'', * FROM OPENQUERY([' + @name + '],
''
SELECT
i.Name,
i.database_id,
b.mirroring_state
from msdb.sys.databases i
INNER JOIN msdb.sys.database_mirroring b
ON i.database_id = b.database_id
WHERE b.mirroring_state IS NOT NULL
'')'


EXECUTE sys.sp_executesql @sql;
FETCH NEXT FROM c1
END
CLOSE c1
DEALLOCATE c1

最佳答案

OPENQUERY只能与有效的链接服务器引用一起使用。根据 MSDN:

OPENQUERY ( linked_server ,'query' )

linked_server

Is an identifier representing the name of the linked server.



所以你不能使用 servername\instance作为第一个参数。您必须先创建链接服务器,然后使用链接服务器名称作为第一个参数。

使用动态 SQL 的示例:
DECLARE @linked_server VARCHAR(20), @sql NVARCHAR(512);

SET @linked_server = 'SERVER1\INSTANCE1';
SET @sql = 'SELECT * FROM OPENQUERY([' + @linked_server + '], ''SELECT * FROM SomeTable;'');';

EXEC sys.sp_executesql @sql;

关于sql - SQL Server OPENQUERY 中的括号标识符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com