1
CREATE FUNCTION [dbo].[fn_actions]
(
  @roleid varchar(36)
)
RETURNS TABLE
AS
RETURN
  select *
  from actions 
  where action_type_id in (
    select action_type_id
    from action_roles
    where role_id = isnull(@roleid,role_id)
  )

上記の関数は、指定された @roleid パラメーターに一致する actions_roles テーブルからアクションのリストを返します。ただし、アクション テーブルには、action_roles テーブルにはまったく存在しないアクションがいくつかあります。なので、NULLのパラメータを指定した場合は単純に返す関数にしたい

select * from actions

if ステートメントを使用してみましたが、インライン テーブル関数では機能しないようです。

CREATE FUNCTION [dbo].[fn_actions]
(
  @roleid varchar(36)
)
RETURNS TABLE
AS
RETURN
  IF (@roleid is NULL)
  BEGIN
    select * from actions
  END
  ELSE
    select *
    from actions 
    where action_type_id in (
      select action_type_id
      from action_roles
      where role_id = isnull(@roleid,role_id)
    )

これを達成するための最良の方法は何ですか?

4

1 に答える 1