处理 SQL 服务器表值函数中的 NULL 参数


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 子句?

相关内容

  • 没有找到相关文章

最新更新