起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 136|回复: 5

主从数据集中:删除主表过程中从表删除实现问题**

[复制链接]
发表于 2008-12-22 14:53:22 | 显示全部楼层 |阅读模式
程序中定义:主从数据集规则定义为级联删除

现  状:
当执行删除主表记录代码后,用户等了近10分钟(从表记录3000条)
dsbMaster.DataSet.Delete;

原因分析:
执行SQL跟踪后发现:
平台在处理删除从表记录过程中,是逐条记录删除的,严重影响速度
删除主表:
declare @P1 int
set @P1=3
exec sp_prepare @P1 output, N'@P0 nvarchar(4000)', N'declare @A0 nvarchar(12) select @A0= @P0  DELETE FROM TRETAILREPORT with ( RowLock ) WHERE ( BillNo = @A0 )', 1
select @P1
go
exec sp_execute 3, N'SDH081222002'
go

删除从表:
declare @P1 int
set @P1=4
exec sp_prepare @P1 output, N'@P0 nvarchar(4000)', N'declare @A0 nvarchar(32) select @A0= @P0  DELETE FROM TRETAILREPORTDET with ( RowLock ) WHERE ( SerialNo = @A0 )', 1
select @P1
go
exec sp_execute 4, N'6142D70E1A6540E986ABC64122EB2D85'
go
exec sp_execute 4, N'080D720B11794E4AB62AEAF43E46B39F'
go
exec sp_execute 4, N'464791F5EA78440CB9ADF97936379FD8'
go
exec sp_execute 4, N'943C562877AA45C99EAB2FC34D25CEC0'
go
exec sp_execute 4, N'D01D588B6A144F33BFA8372E5F1014C8'
go
...

强烈建议:
当主从表规则为级联删除时,在执行主表删除过程中,变更从表记录删除的实现方法
由:delete 从表 where 从表关键字段 = ?
改为:delete 从表 where 关联字段 = ?
回复

使用道具 举报

发表于 2008-12-22 14:57:55 | 显示全部楼层
变更方法:不要定义主从,通过代码来实现(主数据集的afterscroll事件中过滤从数据集,删除的时候直接发一个delete语句就可以了。)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-22 15:06:13 | 显示全部楼层
又绕平台,晕
回复 支持 反对

使用道具 举报

发表于 2008-12-22 15:15:39 | 显示全部楼层
暂时可以先绕一下,我已经把该问题反馈给平台组了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-22 15:19:09 | 显示全部楼层
期待解决
回复 支持 反对

使用道具 举报

发表于 2008-12-22 15:33:12 | 显示全部楼层
好,有结果后我再回复。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-28 08:50 , Processed in 0.038247 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表