报告服务生成的sp_executesql代码返回错误的值

时间:2016-06-20 15:06:34

标签: sql-server reporting-services sp-executesql

我已使用带参数的存储过程在报告服务2012中为我的报告生成结果集,但返回的结果是错误的。 我跟踪生成的命令,这里是:

EXEC sp_executesql N'EXECUTE [Controls&Compliance].[dbo].[GetAccountsDetails_2]'
    ,N'@Region nvarchar(4000),@Market nvarchar(4000),@SiteID nvarchar(4000),@ServerClass nvarchar(4000),@InstanceName nvarchar(4000),@LoginName nvarchar(8)'
    ,@Region = NULL
    ,@Market = NULL
    ,@SiteID = NULL
    ,@ServerClass = NULL
    ,@InstanceName = NULL
    ,@LoginName = N'1C_admin'

此命令生成数千行。

奇怪的是,如果我在sp_executesql之外执行代码,它会返回正确的结果(1行):

EXECUTE [Controls&Compliance].[dbo].[GetAccountsDetails_2] @Region = NULL
    ,@Market = NULL
    ,@SiteID = NULL
    ,@ServerClass = NULL
    ,@InstanceName = NULL
    ,@LoginName = N'1C_admin'

我读过一篇关于由错误的参数顺序生成的问题的文章,但事实并非如此。我还检查了参数数据类型,所有类型都相同。

有人可以帮助理解为什么会出现这种行为以及如何避免这种行为?

2 个答案:

答案 0 :(得分:0)

这是我第一次在数据库名称中看过​​&符号!

无论如何,回到问题。

  1. 这是生产还是视觉工作室?
  2. 是否有任何缓存?
  3. 使用存储过程填充数据集 - 在此实例中没有理由使用sp_executesql!
  4. 如果问题仍然存在(我打赌不会发生),请将参数写入SP中的表格。

答案 1 :(得分:0)

  1. 这是一个预制系统。我正在使用报告构建器
  2. 没有缓存 - 服务器重启给出了同样的问题
  3. sp_executesql是由报告服务生成的 - 我无法控制此
  4. 我顺便找到了解决方案。 这似乎与报告服务创建或解释报告的方式有关。 我创建了对存储过程的引用,手动创建了所有参数,这种方式给出了问题。 如果您通过guy接口选择存储过程,则它会将正确的sp_executesql代码发送到SQL Server。 这是非常痛苦的,仍然不清楚原因,但现在有效。