首先我要说明白微软说他们有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,它没有被破坏。那么,这仍然是一个错误,还是在安装过程中我可能忽略了一些设置?谢谢你的帮助。
答案 0 :(得分:1)
根据我使用恢复模型的经验=简单有时会出现此错误。切换到恢复模型=完全消除了问题,一直是我的解决方法,虽然不是一个理想的解决方案。