【发布时间】:2017-11-20 23:05:07
【问题描述】:
我想创建一个表值函数,它根据 Table2 中的值过滤 Table1,但如果 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 中实现愿望功能?谢谢。
附: - 上面的例子是简单的情况。理想情况下,我会将多个表作为参数传递给MyFunction,并对每个参数表应用相同的 IF/ELSE 逻辑。
【问题讨论】:
标签: sql sql-server