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

时间:2015-01-31 00:58:55

标签: sql-server stored-procedures reporting-services ssrs-2012

我正在使用链接服务器设置动态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'

我收到以下错误:

" Msg 208,Level 16,State 1,Line 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') 

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

感谢。

2 个答案:

答案 0 :(得分:1)

您可以在存储过程中使用print @sql来查看它的评估结果吗?将其粘贴到新的查询窗口中,看看是否得到相同的错误。如果是,请将其粘贴在此处。

显示的代码非常适合我。

答案 1 :(得分:1)

感谢@PaulHoke提出添加到存储过程的建议。我发现我有两件事错了......我发现我的存储过程代码中缺少一个空格。我错过了单引号和.remotesvrnm.dbo.CUST之间的空格....'。

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