当与OUTER APPLY一起使用时,我在表值函数上遇到了一些奇怪的行为.我有一个简单的内联函数,它返回一些基于另一个表中的行的简单计算.当TVF的输入值是硬编码标量时,不返回任何行.当我在CTE中使用相同的标量并从中生成一行时,然后使用CROSS APPLY将它们作为列提供,没有结果集.当我使用OUTER APPLY执行相同操作时,我得到1行(如预期的那样),但是其中两个是输出列NULL,另外两个是NOT NULL.基于BOL,这不应该发生OUTER APPLY.这是用户错误吗?我写了一个简单的版本来演示这个问题.
--Test set-up
CREATE FUNCTION dbo.TVFTest
(
@keyID INT,
@matchValue1 MONEY,
@matchValue2 MONEY
)
RETURNS TABLE AS RETURN
(
WITH TestRow
AS (SELECT @keyID AS KeyID,
@matchValue1 AS MatchValue1,
@matchValue2 AS MatchValue2)
SELECT KeyID,
MatchValue1,
MatchValue2,
CASE
WHEN MatchValue1 <> MatchValue2
THEN 'Not equal'
ELSE 'Something else'
END AS MatchTest
FROM TestRow
WHERE MatchValue1 <> MatchValue2
)
GO
Run Code Online (Sandbox Code Playgroud)
询问
WITH Test AS
(
SELECT 12 AS PropertyID,
$350000 AS …Run Code Online (Sandbox Code Playgroud)