我已经使用了带有参数的存储过程来生成我在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!
无论如何,回到问题。
- 这是生产还是视觉工作室?
- 是否有任何缓存?
- 使用存储过程填充数据集 - 在这种情况下,没有借口使用sp_executesql!
- 如果毕竟问题仍在发生(我敢打赌不会),将您的参数写入sp。 中的表格
- 这是一个预生产系统。我正在使用报告构建器
- 无缓存 - 服务器重新启动给出了相同的问题
- sp_executesql是通过报告服务生成的 - 我无法控制此
我已经找到了解决方案。似乎与报告服务创建或解释报告的方式有关。我创建了对存储过程手动创建所有参数的引用,这样就解决了问题。如果您通过Guy接口选择存储过程,则将右SP_EXECUTESQL代码发送到SQL Server。这是非常痛苦的,但仍然不清楚原因,但现在起作用。