SQL Server:带表参数筛选的用户定义函数

SQL Server:带表参数筛选的用户定义函数,sql,sql-server,Sql,Sql Server,我想创建一个表值函数,它根据Table2中的值过滤Table1,但如果Table2不包含任何内容,则不应用过滤 我不擅长SQL,所以到目前为止我已经做到了: CREATE FUNCTION MyFunction(@table2 Table2 READONLY) RETURNS TABLE AS RETURN ( SELECT userID, first_name, last_name FROM Table1 WHERE EX

我想创建一个表值函数,它根据
Table2
中的值过滤
Table1
,但如果
Table2
不包含任何内容,则不应用过滤

我不擅长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\u security\u组中,函数应返回所有用户及其名字/姓氏

但是如果
user\u security\u组中不存在任何用户,我希望返回所有用户(即不应用筛选)。因此,伪代码如下:

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
中实现所需的功能?多谢各位


附:上面的例子是一个简单的例子。理想情况下,我将把多个表作为参数传递到
MyFunction
中,并对每个参数表应用相同的IF/ELSE逻辑。

一种方法是在
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) ;

但这两种情况都会出现,不是吗?我想他应该先和伯爵一起去,然后再去看看statement@Veljko89 . . . 为什么不让SQL优化器来完成这项工作?@Veljko89-如果语句解决方案是这样的,您建议的COUNT+IF将是什么?谢谢你。@GordonLinoff我读你的答案太快了。你的或陈述确实有效,非常酷的方法;非常感谢。