我正在尝试调试SSRS报告,该报告显示了一些可疑的结果。我正在使用sql分析器,我已经抓住了它正在运行的确切查询,这是用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'
我得到一组稍微不同的结果
- 您可能正在连接一个不同的登录名。
这意味着结果将受到基于SUSER_SNAME或不同模式(dbo.View
vs OtherSchema.View
)的过滤器的影响。它可能在视图内。
-
你有NULL/空字符串的差异
-
不同的数据库或服务器
我会尝试将查询原样(将单引号加倍)粘贴到exec sp_executesql中,并验证结果与手动运行相同。如果不是,那么它将与日期参数有关,如果相同,那么它可能是某种所有者/安全项。