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我读你的答案太快了。你的或陈述确实有效,非常酷的方法;非常感谢。