sp_executesql从视图返回不同于直接运行查询的结果

时间:2011-10-17 05:00:47

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

我正在尝试调试SSRS报告,该报告显示了一些狡猾的结果。我正在使用sql profiler我已经抓住它正在运行的确切查询,该查询是用exec sp_executesql执行的。

查询返回视图中的结果。

如果我按原样运行包含sp_executesql的查询,我会得到一组结果。 如果我抓住嵌套在里面的查询并自己运行它,我得到一组不同的结果。

我不知道这是怎么回事。查询是相同的,我的印象是sp_executesql只是执行查询。

是否有我遗漏的内容或如何进一步调试?

exec调用看起来像这样:

exec sp_executesql N'SELECT FirstName, LastName, DateOfBirth FROM ViewName WHERE
  DateOfBirth >= @pStartDate AND DateOfBirth <= @pEndDate',N'@pStartDate datetime, 
  @pEndDate datetime',@pDate='2010-07-17 00:00:00:000',@pEndDate=''2010-07-17
  23:59:59:000'

如果我运行它,我会得到一组结果。

然后如果我跑:

SELECT FirstName, LastName, DateOfBirth FROM ViewName WHERE 
     DateOfBirth >= '2010-07-17 00:00:00:000' AND
     DateOfBirth <= '2010-07-17 23:59:59:000'

我得到的结果略有不同。

2 个答案:

答案 0 :(得分:1)

  • 您可能正在使用其他登录信息进行连接。

这意味着结果将受到基于SUSER_SNAME或不同架构(dbo.View vs OtherSchema.View)的过滤器的影响。它可能在视图中。

  • 某处有空/字符串差异

  • 不同的数据库或服务器

答案 1 :(得分:0)

我会尝试将查询原样粘贴(将单引号加倍)到exec sp_executesql中,并验证结果与手动运行相同。如果没有,那么它将与date参数有关,如果相同,那么它可能是某种所有者/安全项。