CREATE FUNCTION fn_roles(@userid varchar(36))
RETURNS TABLE
AS
RETURN
SELECT *
FROM user_roles
WHERE userid = @userid
我的函数接受参数@userid
,并从user_roles
表中返回分配给用户的角色。
如果我想在传递参数的NULL
值时返回user_roles
表中的所有记录,该怎么办?处理这个问题最优雅的方法是什么?
只需将其添加到带有or
的 where 子句中:
select *
from user_roles
where userid = @userid or @userid is null
您可以使用ISNULL
检查参数是否为空,在这种情况下它将返回userId,因此它将返回所有角色,如下所示:
CREATE FUNCTION fn_roles(@userid varchar(36))
RETURNS TABLE
AS
RETURN
select * from user_roles
where userid = ISNULL(@userid,userid)
不仅如此,但您也可以尝试另一种选择。
CREATE FUNCTION fn_roles (@userid VARCHAR(36))
RETURNS TABLE
AS
RETURN
SELECT *
FROM user_roles
WHERE @userid IS NULL
OR (
@userid IS NOT NULL
AND userid = @userid
)
如何创建条件 WHERE 子句?