Проверка T-SQL, почему отсутствует запись - PullRequest
2 голосов
/ 02 февраля 2010

Если у вас есть очень сложный оператор SELECT и некоторые записи не включены из-за объединения, каков самый простой способ отладить это и найти причины этого?

Ответы [ 4 ]

2 голосов
/ 02 февраля 2010

Измените СОЕДИНЕНИЯ / ВНУТРЕННИЕ СОЕДИНЕНИЯ на ВНЕШНИЕ СОЕДИНЕНИЯ и найдите значения NULL там, где их не должно быть.

0 голосов
/ 02 февраля 2010

Стиль двоичного поиска:

Если у вас есть 10 объединений, закомментируйте последние 5.

Все еще есть проблема? закомментируйте последние 2/3 соединений, которые еще не прокомментированы

Все еще есть проблема? закомментируйте последние 1/2 соединения, которые еще не прокомментированы

Делайте это до тех пор, пока вы не приступите к работе, тогда проблема будет заключаться в последних закомментированных вами соединениях.

Да, вы можете делать их по одному, но обычно это происходит быстрее.

Очевидно, вам придется закомментировать все столбцы, не используемые в операторе select, но я обычно просто помещаю / * * / вокруг всех столбцов, а затем вместо этого ставлю *.

Достаточно взглянуть на количество возвращенных результатов.

0 голосов
/ 02 февраля 2010

Вы можете включить свою логику ON в предложение WHERE, сформулировать ее так:

WHERE 1=1
AND...
AND...

и просто закомментировать как можно больше терминов, пока вы не изолируете неожиданное поведение.*

0 голосов
/ 02 февраля 2010

Я не знаю, поможет ли это вам, но когда я столкнусь со сложным выбором, который мне трудно поддерживать или отладить, я разобью его на отдельные общие табличные выражения (CTE) , Я обнаружил, что это облегчает понимание и поддержку многих моих запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...