交叉应用或内部连接作为 TVF 的子查询

Cross applying or inner joining as subquery for a TVF

情况:

我有一个带有一个参数 DATETVF。我想让用户输入一个字符串列表作为附加参数。熟悉用户类型但不想用

函数: dbo.fnExample(@StartDate)

这是我的两个选择: 选项 1

SELECT base.*
FROM (SELECT * FROM dbo.fnExample('2019-05-01')) AS base
INNER JOIN ( VALUES
('something'),
('something2'),
('n'),
(...)) AS base2(ColumnA)
ON base.ColumnA=base2.ColumnA

选项 2(不起作用,因为我不确定如何使用 cross apply 加入该列)。

SELECT *
FROM ( VALUES
('something'),
('something2'),
('n'),
(...)) AS base2(ColumnA)
CROSS APPLY dbo.fnExample('2019-05-01')

Objective:

我的问题有三个方面。哪个会有更好的表现?有没有上面没有提到的其他更好的选择?提议的选项有哪些限制?感谢您的帮助!

我想你想要 JOIN,而不是 APPLY:

SELECT *
FROM dbo.fnExample('2019-05-01') f JOIN
     ( VALUES ('something'), ('something2'), ('n'), (...)
     ) AS base2(ColumnA)
     ON  f.columnA = base2.ColumnA;

也就是说,table-valued 函数不必使用 APPLY 调用。 APPLY 是一种从其他 FROM 子句条目传递参数的方法。