我正在使用链接服务器设置动态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')
我用来设置它的指南我是从网络搜索中提取的。我不知道如何解决这个问题。任何指导都将不胜感激。
感谢。
答案 0 :(得分:1)
您可以在存储过程中使用print @sql来查看它的评估结果吗?将其粘贴到新的查询窗口中,看看是否得到相同的错误。如果是,请将其粘贴在此处。
显示的代码非常适合我。
答案 1 :(得分:1)
感谢@PaulHoke提出添加到存储过程的建议。我发现我有两件事错了......我发现我的存储过程代码中缺少一个空格。我错过了单引号和.remotesvrnm.dbo.CUST之间的空格....'。
第二个问题是,在执行存储过程时,我需要使用链接服务器的名称,而不是SQL Server实例名称。 - 我一直关注的指南,我在网上找到的,写得不好。