执行调用链接服务器的存储过程时收到错误

Receiving an error when executing a stored procedure that calls a linked server

我正在使用链接服务器设置动态 Reporting Services 共享数据源。这样做时,我创建了一个需要参数的存储过程,并且在测试存储过程时(在 SSRS 中设置其他所有内容之前)我收到了一个错误。存储过程代码如下所示:

     create procedure [dbo].[SelectFromServer3]

    @ServerName sysname

 as
 begin

    set nocount on;

     declare @sql nvarchar(max)

  set @sql = N'Select * from ' + quotename(@ServerName)+ '               
 .remotesvrnm.dbo.CUSTOMERS_DISAM_TABLE'

  exec sp_executesql @sql

 end

当我执行以下查询来测试存储过程时:

    EXEC SelectFromServer3 @ServerName = 'SQLSVRInstanceNM'

我收到以下错误:

“消息 208,级别 16,状态 1,第 1 行 对象名称无效 'remotesvrnm.dbo.CUSTOMERS_DISAM_TABLE'."

但是,如果我直接使用如下查询查询链接服务器:

  EXEC ('SELECT * from remotesvrnm.dbo.CUSTOMERS_DISAM_TABLE') AT LNKDSRVRNM

数据按预期返回。即使使用 openquery 语句也能按预期工作:

    Select * from openquery (LNKDSRVRNM, 'select * from remotesvrnmdbo.CUSTOMERS_DISAM_TABLE') 

我用来设置它的指南是从网络搜索中提取的。我不知道如何解决这个问题。任何指导将不胜感激。

谢谢。

您可以在存储过程中使用 print @sql 来查看它的计算结果吗?将其粘贴到新查询 window 中,看看是否出现相同的错误。如果是,请粘贴在这里。

显示的代码非常适合我。

感谢@PaulHoke 提出添加到存储过程的建议。我发现我有两处错误...我发现我的存储过程代码中缺少 space。我在单引号和 .remotesvrnm.dbo.CUST.....'.

之间遗漏了一个 space

第二个问题是,在执行存储过程时,我需要使用链接服务器的名称,而不是 SQL 服务器实例名称。 --我一直在关注的指南,我在网上找到的,写得不好。