SQL Server Different OPENROWSET using EXEC or Direct call

dkqlctbz  于 2023-05-05  发布在  其他
关注(0)|答案(1)|浏览(147)

I use SQL Server 2022 CU3 and Target is SQL Server 2017 CU14.
I stuck in the OPENROWSET.

I check openrowset query success on SQL Server 2022 when i direct call.
like this.

SELECT * FROM OPENROWSET('SQLOLEDB','10.10.10.10,1433';'TestUser';'TestUser@@', 'SELECT @@VERSION')

Microsoft SQL Server 2017 (RTM-CU14) (KB4484710) - 14.0.3076.1 (X64)   Mar 12 2019 19:29:19   Copyright (C) 2017 Microsoft Corporation  Standard Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)

But i have to replace ip, port into variable.
So I changed it Declare / Set / Exec. But SQL Server return 7202 error.

How should I fix about this.

declare @sql nvarchar(max)
SET  @sql = 'SELECT * FROM OPENROWSET(''SQLOLEDB'','''+@ip+','+@port+''';''TestUser'';''TestUser@@'', ''SELECT @@VERSION'')'

EXEC @sql
go

메시지 7202, 수준 11, 상태 2, 줄 7
sys.servers에서 서버 'SELECT * FROM OPENROWSET('SQLOLEDB',
                                             '10'을(를) 찾을 수 없습니다. 올바른 서버 이름이 지정되었는지 확인하십시오. 필요하면 저장 프로시저 sp_addlinkedserver를 실행하여 sys.servers에 서버를 추가하십시오.

Even though I don't use variable but the result same.

declare @sql nvarchar(max)
set @sql = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',
                                             ''10.10.10.10,1433'';''TestUser'';''TestUser@@'',
                                             ''SELECT @@VERSION'')'
print(@sql)
EXEC @sql
go

메시지 7202, 수준 11, 상태 2, 줄 7
sys.servers에서 서버 'SELECT * FROM OPENROWSET('SQLOLEDB',
                                             '10'을(를) 찾을 수 없습니다. 올바른 서버 이름이 지정되었는지 확인하십시오. 필요하면 저장 프로시저 sp_addlinkedserver를 실행하여 sys.servers에 서버를 추가하십시오.
uz75evzq

uz75evzq1#

use SET QUOTED_IDENTIFIER OFF and double quotes

相关问题