交叉应用或内部连接作为 TVF 的子查询
Cross applying or inner joining as subquery for a TVF
情况:
我有一个带有一个参数 DATE
的 TVF
。我想让用户输入一个字符串列表作为附加参数。熟悉用户类型但不想用
函数: 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
子句条目传递参数的方法。
情况:
我有一个带有一个参数 DATE
的 TVF
。我想让用户输入一个字符串列表作为附加参数。熟悉用户类型但不想用
函数: 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
子句条目传递参数的方法。