通过报告服务生成的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'

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

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

这是我第一次在数据库名称中看到anmpers!

无论如何,回到问题。

  1. 这是生产还是视觉工作室?
  2. 是否有任何缓存?
  3. 使用存储过程填充数据集 - 在这种情况下,没有借口使用sp_executesql!
  4. 如果毕竟问题仍在发生(我敢打赌不会),将您的参数写入sp。
  5. 中的表格
  1. 这是一个预生产系统。我正在使用报告构建器
  2. 无缓存 - 服务器重新启动给出了相同的问题
  3. sp_executesql是通过报告服务生成的 - 我无法控制此

我已经找到了解决方案。似乎与报告服务创建或解释报告的方式有关。我创建了对存储过程手动创建所有参数的引用,这样就解决了问题。如果您通过Guy接口选择存储过程,则将右SP_EXECUTESQL代码发送到SQL Server。这是非常痛苦的,但仍然不清楚原因,但现在起作用。

相关内容

  • 没有找到相关文章

最新更新