Обрабатывать параметр NULL в SQL Значение таблицы сервера - PullRequest
1 голос
/ 16 февраля 2020
CREATE FUNCTION fn_roles(@userid varchar(36))
RETURNS TABLE
AS
    RETURN
        SELECT * 
        FROM user_roles
        WHERE userid = @userid

Моя функция принимает параметр @userid и возвращает роли, назначенные пользователю из таблицы user_roles.

Что если я хочу вернуть все записи из таблицы user_roles, если передано значение NULL для параметра? Какой самый элегантный способ справиться с этим?

Ответы [ 3 ]

3 голосов
/ 16 февраля 2020

Просто добавьте его в предложение where с помощью or:

select * 
from   user_roles
where  userid = @userid or @userid is null
2 голосов
/ 16 февраля 2020

Вы можете проверить, что параметр равен нулю, используя ISNULL, в этом случае он вернет userId, поэтому он вернет все роли следующим образом:

CREATE FUNCTION fn_roles(@userid varchar(36))
RETURNS TABLE
AS
RETURN
select * from  user_roles
where userid = ISNULL(@userid,userid)
1 голос
/ 16 февраля 2020

Не в последнюю очередь, но просто еще один вариант, который вы можете попробовать таким же образом.

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?

...