У меня возникают проблемы, когда у меня есть несколько объединений и когда переменные, переданные им, равны нулю. Мне интересно, как игнорировать соединение, когда значение пусто. Я думал, что могу сделать это так, но это не приносит мне правильных результатов, когда любой из параметров имеет значение, а остальное - нет.Как проигнорировать объединение, когда переменная равна нулю
@param1 int = NULL
,@param2 int = NULL
,@param3 int = NULL
SELECT t.ID,t.Col1 FROM Table t
JOIN RelationalTable1 t1 ON (@param1 IS NULL) OR (t1.ID1 = t.ID AND t1.ID2 = @param1)
JOIN RelationalTable2 t2 ON (@param2 IS NULL) OR (t2.ID1 = t.ID AND t2.ID2 = @param2)
JOIN RelationalTable3 t3 ON (@param3 IS NULL) OR (t3.ID1 = t.ID AND t3.ID2 = @param3)
Как я могу заставить эти объединения исчезать, когда их параметры равны нулю?
Как результаты не действуют? Просьба привести пример. Вы можете создать его по адресу http://sqlfiddle.com –
Он возвращает 0 результатов, когда все параметры являются emtpy или не возвращают данные, смешанные, когда есть 1 + params, не равные нулю. –
Вы должны написать dymanic sql, чтобы справиться с этим. Вы не можете просто игнорировать соединение. Если бы у вас когда-либо было только 2 или 3 параметра, вы могли бы писать отдельные варианты, используя конструкцию If, но более 3 из них выходят из-под контроля vey быстро, и даже три имеют ужасное количество случаев для обработки вручную. – HLGEM