我有一个用户定义类型的存储过程作为输入,如下所示
//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语句也被写入两次以过滤结果,是否有更好的方法不重复代码?预先感谢
答案 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)