如何根据 udf 参数更改选择的 from 子句中使用的表?

unc*_*mil 3 sql-server functions

我有两个表 A 和 B(具有完全相同的列和整体结构),我正在尝试创建一个带有选择的 TVF,它根据传递给 TVF 的参数选择使用 A 或 B:

create function dbo.testing(@switch varchar(1))
returns @SomeData table (data int)
  begin
    insert into @SomeData
    select
      number
    from
      [[either A or B depending on the value of @switch]] <===== ???
  return
 end;
Run Code Online (Sandbox Code Playgroud)

从右边进来的箭头表示我不知道如何处理。

这样做的正确方法是什么?我知道我不能只是在那里打一根绳子,那么最好的方法是什么?

Mar*_*ith 5

此处不需要多语句 TVF。

您可以使用内联

CREATE FUNCTION dbo.testing(@switch VARCHAR(1))
RETURNS TABLE
AS
    RETURN
      (SELECT number
       FROM   A
       WHERE  @switch = 'A'
       UNION ALL
       SELECT number
       FROM   B
       WHERE  @switch = 'B') 
Run Code Online (Sandbox Code Playgroud)

如果传递给的值@switch是变量或参数(而不是常量),您可能会发现使用它可以获得更好的计划OPTION (RECOMPILE)。特别是如果基数AB非常不同的(有可能即使没有暗示只有相关的一个将被访问的表的访问将与启动表达谓词的过滤器下)。