Я пишу хранимую процедуру для выбора адресов. Существует много параметров выбора, но проблема заключается в выборе состояний.
Страна является обязательной и может иметь одно или несколько названий стран.
Если страна - США, то штат может быть НЕДЕЙСТВИТЕЛЕН или один или много кодов штатов.
У меня есть табличная функция (ParmTable_String), поэтому я могу присоединиться к спискам параметров, и это работает при наличии кодов состояния:
DECLARE @Country AS varchar(MAX);
DECLARE @State AS varchar(256);
SET @Country = 'USA';
SET @State = 'ME, VT';
SELECT *
FROM Customer
JOIN ParmTable_String(@Country, ',') AS CT
ON Country = CT.str
JOIN ParmTable_String(@State, ',') AS ST
ON State = ST.str
но если @State = null
, я получаю нулевой набор результатов. Если я сделаю это левое соединение и добавлю предложение where, оно будет работать для одного кода состояния или нуля, но не для списка.
WHERE State = @State OR @State IS NULL
У кого-нибудь есть решение этой проблемы?
Хорошо, у меня есть решение, но я думаю, что есть лучший способ, так как мне это кажется немного грубым:
DECLARE @Country AS varchar(MAX);
DECLARE @State AS varchar(256);
SET @Country = 'USA';
SET @State = 'ME, VT';
SELECT *
FROM Customer
JOIN ParmTable_String(@Country, ',') AS CT
ON Country = CT.str
WHERE (State IN
(SELECT str from lntw.ParmTable_String(@State, ',')) OR @State IS NULL)