Foxtable(狐表)用户栏目专家坐堂 → 欢迎高手来PK


  共有3777人关注过本帖树形打印复制链接

主题:欢迎高手来PK

帅哥哟,离线,有人找我吗?
santde
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:274 积分:2293 威望:0 精华:0 注册:2015/6/14 18:33:00
欢迎高手来PK  发帖心情 Post By:2015/8/20 8:59:00 [只看该作者]

PK函数

一函数处理 主表,明细表无用数据. 1,删除掉关联字段无值的所有主表明细表记录. 2,删除掉主表有值,明细表无值的数据,3,删除掉明细表有数据,主表无对应数据的所有记录.

   4,要求程序最简洁,不能再少一个字符,无需再多一个字符. 5,要求运行时间,理论和实际耗时最少.

 

希望大家都来PK,都来命题,只是这样针对一段代码或一个功能进行反复优化,新手,老手才能进步最快,希望官方来命题,最好官方再来个打赏制度,每一个命题帖子的PK冠军能得到现金奖赏.

一般新设计程序时,主表明细表总有些垃圾数据,运行过程中也会产生垃圾数据,此函数可快速清除.

 

我先放出一个函数. 我知道这个函数应快最少还能少几个字符的.

 

大仁者见仁,智者现智,优化此代码也行,再出方案也行.

 

 

'本函数的格式为:
'Functions.Execute("清除数据","订单_主表","订单_明细表","GUID")
'args(0)为:主表
'args(1)为:明细表
'args(2)为:关联字段

Dim cmda As New SQLCommand
cmda.ConnectionName= gs_strActiveConn
cmda.CommandText = "delete A fr om " & args(0) & " A LEFT OUTER JOIN "& args(1) & " B on A."& args(2) &" = B."& args(2) &" where B."& args(2) &" Is null"
cmda.ExecuteNonQuery
Dim cmdb As New SQLCommand
cmdb.ConnectionName= gs_strActiveConn
cmdb.CommandText = "delete A fr om " & args(1) & " A LEFT OUTER JOIN " & args(0) & " B on A." & args(2) & " = B." & args(2) &" where B." & args(2) &"  Is null"
cmdb.ExecuteNonQuery

Dim cmdc As New SQLCommand
cmdc.ConnectionName
= gs_strActiveConn
cmdc.CommandText = "delete fr om "& args(0) & " where " & args(2) & " Is null"
cmdc.ExecuteNonQuery
Dim cmdd As New SQLCommand
cmdd.ConnectionName= gs_strActiveConn
cmdd.CommandText = "delete fr om "& args(1) &" where "& args(2) &" Is null"
cmdd.ExecuteNonQuery


 回到顶部
帅哥哟,离线,有人找我吗?
浙江仔
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2015/8/20 9:04:00 [只看该作者]

顶,学习

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/8/20 9:09:00 [只看该作者]

连接查询sql语句就是最快的。

 

你的设计思路本身就有问题,既然不想有多余数据,你就在数据那里设置好外键约束就行啊。


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2015/8/20 9:17:00 [只看该作者]

我的想法跟大红袍一样,设置不可以输入无用的数据才对

 回到顶部
帅哥哟,离线,有人找我吗?
santde
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:274 积分:2293 威望:0 精华:0 注册:2015/6/14 18:33:00
  发帖心情 Post By:2015/8/20 9:22:00 [只看该作者]

这不是问题的关键。

 

如果明细表的数据被一条一条了删除光了,主表就产生垃圾数据,这个时候你如何高速的判断哪一条主表数据成垃圾数据了? 这也是一个关键.

 

另一个关键, 本问题的函数不是本质,本质是哪怕是一个再简单的需求,我们需要编码去解决,那么大家来PK,这个过程将是一个领导新人入门的一个过程 ,对于官方如此,对于新人如此,此贴的意义在此,不此问题本身.


 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2015/8/20 9:24:00 [只看该作者]

 1,删除掉关联字段无值的所有主表明细表记录. 2,删除掉主表有值,明细表无值的数据,3,删除掉明细表有数据,主表无对应数据的所有记录.

针对第一条,设置关联字段not null,避免第一问题产生
针对第二条,理论上不需要删除,只需要展示的时候,使用INNER JOIN就不会有。
针对第三条,程序设置最初就应当减少对删除的使用,可以对子表使用外键,避免误删除。当一个主表关联更多的子表的时候,这个问题会比较突出。

代码就不优化了,

Dim cmda As New SQLCommand
cmda.ConnectionName= gs_strActiveConn
cmda.CommandText = "delete A fr om " & args(0) & " A LEFT OUTER JOIN "& args(1) & " B on A."& args(2) &" = B."& args(2) &" where B."& args(2) &" Is null"
cmda.ExecuteNonQuery
cmda.CommandText = "delete A fr om " & args(1) & " A LEFT OUTER JOIN " & args(0) & " B on A." & args(2) & " = B." & args(2) &" where B." & args(2) &"  Is null"
cmda.ExecuteNonQuery

cmda.CommandText = "delete fr om "& args(0) & " where " & args(2) & " Is null"
cmda.ExecuteNonQuery
cmda.CommandText = "delete fr om "& args(1) &" where "& args(2) &" Is null"
cmda.ExecuteNonQuery



 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/8/20 9:28:00 [只看该作者]

代码已经不需要改。

 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2015/8/20 9:49:00 [只看该作者]

貌似foxtable不支持存储过程?

 

不然可以把四条SQL放到一起执行,少调用3次ExecuteNonQuery


 回到顶部
帅哥哟,离线,有人找我吗?
santde
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:274 积分:2293 威望:0 精华:0 注册:2015/6/14 18:33:00
  发帖心情 Post By:2015/8/20 10:13:00 [只看该作者]

所以说还有改善空间期待大神出现

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/8/20 10:16:00 [只看该作者]

以下是引用santde在2015/8/20 10:13:00的发言:
所以说还有改善空间期待大神出现

 

语句已经没有优化的空间了啊。事务参考

 

http://www.foxtable.com/help/topics/2933.htm

 


 回到顶部
总数 12 1 2 下一页