我在SQL Server 2012表@Table1
中有两个用户定义的表类型,列名为ColumnTable1
,@Table2
,其中一列为ColumnTable2
。
我希望从名为employeeData
的物理表中选择数据。此表包含两列(ColumnTable1
和ColumnTable2
)。
我想要的是当@table1
和@table2
都有数据时,应返回与employeeData
中的UDT匹配的值。如果只有其中一个,则应返回与该表匹配的值,如果两者都为null,则必须返回Employeedata
表中的所有数据。
我尝试了一个可以正常工作的查询,它们都不是null。
SELECT * FROM employeeData WHERE
(((NOT EXISTS (SELECT 1 FROM @Table1) OR ColumnTable1 IN (SELECT
ColumnTable1 FROM @Table1)) AND (NOT EXISTS (SELECT 1 FROM @Table2)
OR ColumnTable2 in (SELECT ColumnTable2 FROM @Table2)))
PS:此示例仅适用于两个表,我可能需要在将来添加新的此类用户定义表以进行类似过滤。
答案 0 :(得分:1)
试试这个
select t.*
from employeeData t
left join @Table1 t1 on t1.ColumnTable1 =t.ColumnTable1
left join @Table2 t2 on t2.ColumnTable2 =t.ColumnTable2
where
not (t1.ColumnTable1 is null and exists (select top 1 1 from @Table1))
and
not (t2.ColumnTable2 is null and exists (select top 1 1 from @Table2))