服务器: 消息 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的主键有级联的关系。一去掉就可以了,总算是找到了问题...可以安心了