可恶的MSSQL 内部 SQL Server 错误。(臭BUG)

服务器: 消息 8624,级别 16,状态 1,行 442
内部 SQL Server 错误。

郁闷了两天的问题终于得到了解决。记下来

前天突然客户反应[客户订单],用的好好的居然有"内部错误",跟踪有发现是MSSQL的错误。代码如下:

SET NOCOUNT ON

DECLARE
@mm_Key uniqueidentifier

SELECT
@mm_Key='{50A5A02D-0CA7-4864-958A-63205D29E42A}'

DECLARE @DanJuKey uniqueidentifier

SELECT @DanJuKey = @mm_Key

DELETE f_pzjl_d
  FROM mak_GongChengPZJL f_pzjl
  INNER JOIN mak_GongChengPZJL_D f_pzjl_d ON f_pzjl_d.FFormKey = f_pzjl.FFormKey
  INNER JOIN mak_WuLiaoGCPZ f_pz_m ON f_pz_m.FFormKey = f_pzjl.FGongCPZKey
  LEFT JOIN sal_CustOrder_D od_d ON f_pzjl.FFormKey = od_d.FGongChengPZKey
  WHERE f_pzjl.FOwnsFormKey = @DanJuKey  --<1>
        AND (od_d.FKey IS NULL
            OR od_d.FWuLiaoKey <> f_pz_m.FWuLiaoKey) 

 

试了下发现用<1>的@DanJuKey替换常量或者用@mm_Key就可以,我用@mm_Key替换了@DanJuKey暂时解决了问题。郁闷。

 

今天客户有反应[采购订单]也有相同的问题,我想这次不能这么忽悠过去了,于是认真查了查。网上也找了很久。找不到,突然我看代码的时候发现

DELETE f_pzjl_d
  FROM mak_GongChengPZJL f_pzjl
  INNER JOIN mak_GongChengPZJL_D f_pzjl_d ON f_pzjl_d.FFormKey = f_pzjl.FFormKey
  INNER JOIN mak_GongChengPZJL_D_SL f_pzjl_d_sl ON f_pzjl_d_sl.FKey = f_pzjl_d.FKey  --这一段多
  INNER JOIN mak_WuLiaoGCPZ f_pz_m ON f_pz_m.FFormKey = f_pzjl.FGongCPZKey
  LEFT JOIN sal_CustOrder_D od_d ON f_pzjl.FFormKey = od_d.FGongChengPZKey
  WHERE f_pzjl.FOwnsFormKey = @mm_Key
        AND (od_d.FKey IS NULL
            OR od_d.FWuLiaoKey <> f_pz_m.FWuLiaoKey)

结论:

  发现只是那一段多而已。于是查了查,发现mak_GongChengPZJL_D和mak_GongChengPZJL_D_SL的主键有级联的关系。一去掉就可以了,总算是找到了问题...可以安心了

原文地址:https://www.cnblogs.com/DKSoft/p/1584116.html