以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 这种情况的where条件要如何写? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=118592) |
-- 作者:happyft -- 发布时间:2018/5/6 23:07:00 -- 这种情况的where条件要如何写? 在表中遍历行时得到一些编号值,但有的可能已在sql数据库表中,有的不在,想让不在的才插入 INSERT INTO 事务提醒(单据名称,单据编号) SE LECT \'工序分类\', \'Z01\' UNION ALL SE LECT \'工序分类\', \'D01\' WHERE 单据名称 = \'工序分类\' AND 单据编号 NOT IN ( \'Z01\', \'Z02\' ); 比如上面要实现,只插入D01这行 即要插入的都是se lect组合在一起的常量值,这种情况下要如何写where条件? 上面那样会提示,单据名称,单据编号列不存在 谢谢!
|
-- 作者:有点蓝 -- 发布时间:2018/5/7 9:18:00 -- 先查询判断是否在数据库,再插入 select 单据编号 from 事务提醒 WHERE 单据名称 = \'工序分类\' AND 单据编号 IN ( \'Z01\', \'Z02\' ) 获取已经存在的单据编号,排除后再生成插入的sql
|
-- 作者:HappyFt -- 发布时间:2018/5/7 9:54:00 -- select 单据编号 from 事务提醒 WHERE 单据名称 = \'工序分类\' AND 单据编号 IN ( \'Z01\', \'Z02\' ) 这个不能判断,因为事务提醒的单据编号中可能有Z01,而没有Z02,除非每条都去判断,但数据很多时不可能也要每条判断吗?比如从遍历表中有1万行数据,我用se lect 与Union all 语句拼接了每行的单据编号,想将这些单据编号还没有在事务提醒表中的一次性插入, 如果是sql中的两个数据库表很容易实现 INSERT INTO 事务提醒(单据名称,单据编号) se lect 单据名称,单据编号 from 表B where 单据编号 not in (se lect distinct 单据编码 from 事务提醒 where 单据名称 = \'工序分类\') 我现在的问题是INSERT INTO 事务提醒(单据名称,单据编号) 后面是用 SE LECT \'工序分类\', \'Z01\' UNION ALL SE LECT \'工序分类\', \'D01\' UNION ALL ..... 很多常量数据组合在一起的,是不是必须先将这些数据存入sql的一个临时表中(比如表B中),然后用我上面类似的语句一次性插入呢? |
-- 作者:有点蓝 -- 发布时间:2018/5/7 10:37:00 -- 只能拼sql: Dim sb As new StringBuilder sb.AppendLine("INSERT INTO 事务提醒(单据名称,单据编号) ") Dim lst As List(Of String) = DataTables("事务提醒").GetValues("单据编号") For Each r As Row In Tables("表A").Rows If lst.Contains(r("单据编号")) Then Continue For sb.AppendLine("SELECT \'工序分类\', \'" & r("单据编号") & "\' UNION ALL ") Next |
-- 作者:HappyFt -- 发布时间:2018/5/8 14:09:00 -- 再请教下如果是用用两列的组合值contains要怎么判断,因为单据编号相同的,工序号可能有1,2,3等,其他单据编号工序号也是1,2,3等 能不用拆开数据判断吗,因为拆开了判断会不正确, Dim Arys As List(Of String()) = datatables("事务提醒").GetValues("单据编号|工序号") For Each r As Row In Tables("表A").Rows If lst.Contains(r("单据编号") & r("工序号")) Then ... end if Next 红色的那行会出错,不可能每行都用For
Each Ary As
String() In Arys 组合Ary(0) & "|" & Ary(1)然后连接成一个大字符串再来判断吧? 谢谢!
|
-- 作者:有点蓝 -- 发布时间:2018/5/8 15:16:00 -- 用sql取值比较好一点 select 单据编号+\'|\'+工序号 as 号 from 事务提醒 通过sqlcommand得到datatable, Dim lst As List(Of String) = dt.GetValues("号") For Each r As Row In Tables("表A").Rows If lst.Contains(r("单据编号") & "|" & r("工序号")) Then Continue For sb.AppendLine("SELECT \'工序分类\', \'" & r("单据编号") & "\' UNION ALL ") Next |