我想创建一个表值函数,根据Table1
中的值过滤Table2
,但如果Table2
不包含任何内容,则应用NO过滤。
我不擅长SQL,所以这就是我到目前为止:
CREATE FUNCTION MyFunction(@table2 Table2 READONLY)
RETURNS TABLE
AS RETURN (
SELECT userID, first_name, last_name
FROM Table1
WHERE EXISTS (SELECT user_ID FROM Table2 WHERE user_ID = Table1.user_ID AND user_security_group = 5)
)
在上述情况下,如果函数位于user_security_group
5中,该函数应返回所有用户及其姓/名。
但如果user_security_group
5中没有用户,我想返回所有用户(即不应用过滤)。所以,伪代码如:
CREATE FUNCTION MyFunction(@table2 Table2 READONLY)
RETURNS TABLE
AS RETURN (
SELECT userID, first_name, last_name
FROM Table1
-- pseudo code here
IF WHERE EXISTS (SELECT user_ID FROM Table2 WHERE user_ID = Table1.user_ID AND user_security_group = 5)
-- THEN APPLY FILTERING
-- ELSE DO NOT APPLY FILTERING
)
如何在MyFunction
内实现愿望功能?谢谢。
P.S。 - 上面的例子很简单。理想情况下,我将多个表作为参数传递给MyFunction
,并将相同的IF / ELSE逻辑应用于每个参数表。
答案 0 :(得分:1)
一种方法是在WHERE
子句中使用第二个条件:
SELECT t1.userID, t1.first_name, t1.last_name
FROM Table1 t1
WHERE EXISTS (SELECT 1 FROM Table2 t2 WHERE t2.user_ID = t1.user_ID AND t2.user_security_group = 5) OR
NOT EXISTS (SELECT 1 FROM Table2 t2 WHERE t2.user_security_group = 5) ;