SQL-检查是否存在用户定义类型的数据作为存储过程的输入传递

时间:2018-12-02 01:48:30

标签: sql-server case conditional-statements user-defined-types

我有一个用户定义类型的存储过程作为输入,如下所示

//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 :(得分:0)

我必须同意这听起来像xy problem。但是,可以肯定的是,您可以按照以下方式简化此操作。

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)