sp_executesql возвращает другие результаты из представления, чем прямой запрос запроса - PullRequest
0 голосов
/ 17 октября 2011

Я пытаюсь отладить отчет SSRS, который показывает некоторые хитрые результаты. Я использую SQL Server 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 ]

1 голос
/ 17 октября 2011
  • Возможно, вы подключаетесь с другим логином.

Это означает, что результаты будут зависеть от фильтра на основе SUSER_SNAME или другой схемы (dbo.View против OtherSchema.View). Это может быть внутри вида.

  • У вас где-то NULL / пустые различия строк

  • Различные базы данных или сервер

0 голосов
/ 18 октября 2011

Я бы попытался вставить запрос как есть (удвоив одинарные кавычки) в exec sp_executesql и убедиться, что результаты совпадают с ручным запуском.Если нет, то это будет что-то делать с параметром даты, если то же самое, то, скорее всего, это будет какой-то элемент владельца / безопасности.

...