小编Mik*_*ing的帖子

在SQL Server中运行SELECT时丢失行

我有一个简单的选择语句.它基本上是2个CTE,一个包括一个ROW_NUMBER()OVER(PARTITION BY,然后从这些连接到另外4个表.没有函数或任何异常.

WITH Safety_Check_CTE AS 
(
    SELECT  
        Fact_Unit_Safety_Checks_Wkey,
        ROW_NUMBER() OVER (PARTITION BY [Dim_Unit_Wkey], [Dim_Safety_Check_Type_Wkey] 
                           ORDER BY [Dim_Safety_Check_Date_Wkey] DESC) AS Check_No
    FROM 
        [Pitches].[Fact_Unit_Safety_Checks]
), Last_Safety_Check_CTE AS 
(
    SELECT 
        Fact_Unit_Safety_Checks_Wkey 
    FROM 
        Safety_Check_CTE 
    WHERE 
        Check_No = 1
)
SELECT
    COUNT(*)
FROM
    Last_Safety_Check_CTE lc
JOIN 
    Pitches.Fact_Unit_Safety_Checks f ON lc.Fact_Unit_Safety_Checks_Wkey = f.Fact_Unit_Safety_Checks_Wkey
JOIN 
    DIM.Dim_Unit u ON f.Dim_Unit_Wkey = u.Dim_Unit_Wkey
JOIN 
    DIM.Dim_Safety_Check_Type t ON f.Dim_Safety_Check_Type_Wkey = t.Dim_Safety_Check_Type_Wkey
JOIN 
    DIM.Dim_Date d ON f.Dim_Safety_Check_Date_Wkey = d.Dim_Date_Wkey
WHERE 
    f.Safety_Check_Certificate_No IN ('GP/KB11007') --option (maxdop 1)
Run Code Online (Sandbox Code Playgroud)

有时它返回0,1或2行.结果显然应该是一致的.

我在复制问题时运行了配置文件跟踪,我的会话是数据库中唯一的一个.

我已经比较了实际执行计划,它们都是相同的,除了最终的哈希匹配返回不同的行数.

如果我使用MAXDOP 0,我无法复制.

计划比较

t-sql sql-server sql-execution-plan

6
推荐指数
1
解决办法
93
查看次数

标签 统计

sql-execution-plan ×1

sql-server ×1

t-sql ×1