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)
从右边进来的箭头表示我不知道如何处理。
这样做的正确方法是什么?我知道我不能只是在那里打一根绳子,那么最好的方法是什么?
此处不需要多语句 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)
。特别是如果基数A
和B
非常不同的(有可能即使没有暗示只有相关的一个将被访问的表的访问将与启动表达谓词的过滤器下)。
归档时间: |
|
查看次数: |
139 次 |
最近记录: |