SQL Server:用户定义函数w /表参数筛选

时间:2017-11-20 14:52:52

标签: sql sql-server

我想创建一个表值函数,根据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逻辑应用于每个参数表。

1 个答案:

答案 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) ;