我已使用带参数的存储过程在报告服务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'
我读过一篇关于由错误的参数顺序生成的问题的文章,但事实并非如此。我还检查了参数数据类型,所有类型都相同。
有人可以帮助理解为什么会出现这种行为以及如何避免这种行为?
答案 0 :(得分:0)
这是我第一次在数据库名称中看过&符号!
无论如何,回到问题。
答案 1 :(得分:0)
我顺便找到了解决方案。 这似乎与报告服务创建或解释报告的方式有关。 我创建了对存储过程的引用,手动创建了所有参数,这种方式给出了问题。 如果您通过guy接口选择存储过程,则它会将正确的sp_executesql代码发送到SQL Server。 这是非常痛苦的,仍然不清楚原因,但现在有效。