SQL Server 2016 MERGE导致系统断言检查失败

时间:2017-09-27 12:27:59

标签: sql-server sql-server-2016 sql-merge

首先我要说明白微软说他们有bug fix,但我们已经安装了2016年的累积更新,但仍然没有运气。对于2014年运行良好的SCD类型2,这是一个MERGE。当出现此错误时,我们正在测试升级到2016年。以下是导致问题的示例查询。

/* Type 2 Merge */
INSERT INTO BDW.DMEmployer 
                (
                SCD_Current,
                Source_System,
                Company,
                Employer_Number
                )
SELECT          SCD_Current,
                Source_System,
                Company,
                Employer_Number
FROM
    (
       MERGE BDW.DMEmployer dim
       USING ETLWork.work.DMEmployer work
              ON     dim.Employer_Number = work.Employer_Number AND dim.Company = work.Company
       -- This inserts new records in the dimension table
       WHEN NOT MATCHED THEN
              INSERT (SCD_Current,
                    Source_System,
                    Company,
                    Employer_Number
       VALUES (     'Y',
                    work.last_updated,
                    'I',
                    'POINT',
                    work.Company,
                    work.Employer_Number
       WHEN MATCHED AND dim.SCD_Current = 'Y'
                    AND ( dim.Employer_FEIN <> work.Employer_FEIN ) THEN
               UPDATE SET   SCD_Current='N', 
                            SCD_Valid_To_Date = work.last_updated-2

        OUTPUT $Action
                    Action_Taken,                                          
                    'Y' AS SCD_Current,
                    work.Source_System,
                    work.Company,
                    work.Employer_Number
    ) AS MERGE_OUT
WHERE MERGE_OUT.Action_Taken = 'UPDATE';

如果你只运行内部MERGE,这没有问题。但是现在试图在2016年运行整个事情会导致以下失败。我们已经尝试过修复错误,但我想知道我是否错过了其他内容。它只在外部INSERT INTO部分添加~150行。

错误讯息:

  

位置:pageref.cpp:955

     

表达式:IS_OFF(BUF_MINLOGGED,m_buf-&gt; bstat)|| pageModifyType!= PageModifyType_Contents || GetPagePtr() - &gt; IsTextPage()

     

SPID:52

     

流程ID:2820

     

Msg 3624,Level 20,State 1,Line 3系统断言检查有   失败。检查SQL Server错误日志以获取详细信息。通常,一个   断言失败是由软件错误或数据损坏引起的。至   检查数据库损坏,考虑运行DBCC CHECKDB。如果你   同意在安装过程中向微软发送转储,将进行小型转储   发送给微软。 Microsoft可能会提供更新   最新的Service Pack或技术支持的修补程序。

     

消息10054,级别20,状态0,行0传输级别错误   从服务器接收结果时发生。 (提供者:TCP   提供者,错误:0 - 现有连接被强制关闭   远程主机。)

我们运行了DBCC CHECKDB,它没有被破坏。那么,这仍然是一个错误,还是在安装过程中我可能忽略了一些设置?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

根据我使用恢复模型的经验=简单有时会出现此错误。切换到恢复模型=完全消除了问题,一直是我的解决方法,虽然不是一个理想的解决方案。