У меня есть сохраненный процесс с пользовательским типом в качестве входных данных следующим образом
//UDT
CREATE TYPE MY_UDT AS TABLE(
TYPE [varchar](20) NOT NULL
)
CREATE PROC PS
(
@UDT MY_UDT READONLY
)
AS
BEGIN
SELECT COL1, COL2...
FROM tblA
WHERE
1 = CASE WHEN /*CONDITION TO CHECK IF THE UDT DATA IS NULL*/ THEN 1
WHEN EXISTS(select 1 from @UDT WHERE TYPE = 'Red') AND COL2 IN
(SELECT TYPE FROM @UDT WHERE TYPE = 'Red') THEN 1
WHEN EXISTS (SELECT 1 FROM @UDT WHERE TYPE = 'Green') AND COL2
IN (SELECT TYPE FROM @UDT WHERE TYPE = 'Green') THEN 1
ELSE 0
END
END
как мы можем проверить, нет ли данных в UDT, чтобы удовлетворить мое первое условие случая, также в моем втором ив третьем случае оператор SELECT пишется дважды для фильтрации результатов, есть ли лучший способ не повторять код?Заранее спасибо