相关疑难解决方法(0)

外部应用在不匹配时意外返回列NOT NULL

当与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)

t-sql sql-server sql-server-2008 sql-server-2012

14
推荐指数
1
解决办法
896
查看次数