SQL - Проверьте, есть ли данные определенного пользователем типа, переданные в качестве входных данных для хранимой процедуры - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть сохраненный процесс с пользовательским типом в качестве входных данных следующим образом

//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 пишется дважды для фильтрации результатов, есть ли лучший способ не повторять код?Заранее спасибо

1 Ответ

0 голосов
/ 02 декабря 2018

Я должен согласиться, что это звучит ОЧЕНЬ похоже на проблему xy .Но я уверен, что вы могли бы упростить это до чего-то подобного.

SELECT COL1, COL2...
FROM tblA a
left join @UDT udt on udt.TYPE = a.COL2 and udt.TYPE in ('Red', 'Green')
where udt.TYPE IS NOT NULL
    OR NOT EXISTS(select * from @UDT)
...