大致情况是这样的:
   我的项目有四个大的分类:分别是 
        一、分支机构(表tcst_code_Companies) 对应的主键是 I_CompanyID
       二、公司员工(视图 tcst_code_employees)对应的主键是 I_EmployeeID
       三、其它(视图 tcst_code_others)       对应的主键是 I_OtherID
       四、承包人(视图 tcst_code_Contractors) 对应的主键是I_ContractorID   我想更新一数据表 tcst_data_currentBodyRate ,表中有一字段为 I_CurrentBodyID, 通过一系列的
表值函数,其实呢,I_CurrentBodyID的值是与四大分类的对应主键的的值是相等的,也就是说是I_CurrentBodyID
包含在四大主键的值里面,这个应该理解吧现在我要实现的是:
   
   我先要查询出所有四个大类的主键值,应该都是整数,然后把它放到一个什么地方或者东西里,譬如id,然后再查询 tcst_data_currentBodyRate
中的I_CurrentBodyID 值,把他们俩个进行比较,如果 id中的某些值等于 I_CurrentBodyID的话,那么我就更新tcst_data_CurrentBodyRate表中
I_CurrentBodyID 的这条记录; 如果id中的某些值在I_CurrentBodyID中没有的话,那么我就在tcst_data_CurrentBodyRate表中插入这条记录举个很简单的例子,如查询出id 的值为 1,2,3,4,5
而查询出tcst_data_CurrentBodyRate中的I_CurrentBodyID的值为 1,2,3
那么做如下操作
  更新tcst_data_CurrentBodyRate中I_CurrentBodyID的值为1,2,3的记录
  向 tcst_data_CurrentBodyRate插入两条记录,CurrentBodyID的值为4,5我的陈述就到这里了.
希望大家能帮我解决的是,
第一,我怎么样查询出那四个大类的主键值,或者我查出来了该放一个什么地方或者东西里
第二,我查询出了tcst_data_CurrentBodyRate的值,该放在什么地方或者东西里
第三,我怎么样进行比较,将id于I_CurrentBodyID中的值进行比较
第三,比较判断之后,该怎么进行更新和插入操作
我的思路是这样的,当然了,大家肯定有更好的思路,如果有更好的思路,欢迎大家提出,在此谢谢!

解决方案 »

  1.   

    asp.net么?查询出来的东西,可以放到dataset里面,或者放到session里面都可以啊!
      

  2.   

    如果不考虑业务的问题,仅从效率上考虑,建议使用存储过程,并在其中使用事务处理或者在程序中使用事务处理,查询出来的id放到一个字符串数组里,或者HashTable里都可以
      

  3.   


    update t set.. from tcst_data_CurrentBodyRate t inner join X t1 on t1.I_CompanyID= t.I_CurrentBodyIDinsert tcst_data_CurrentBodyRate ...
    select ... from 
    X t1 
    where not exists( select 1 from tcst_data_CurrentBodyRate t where t1.I_CompanyID= t.I_CurrentBodyID )
    将X替换为四大类表 每个表分别执行一次
      

  4.   

    t 就是表tcst_data_CurrentBodyRate
      

  5.   


    那个我以前弄清楚了,是别名上面是两个语句,我现在是要将语句赋值给 string connection=
    最好能将语句做一个语句写出来或者说 用if语句判断if(  )
    {
       update ------
    }
    else
    {
       insert-------
    }能帮忙写下吗?谢谢
      

  6.   

    这里解释一下7楼的意思:
    从lz的描述可知,目的是把表tcst_data_CurrentBodyRate更新,这个表似乎是四大类表的集合,如果表tcst_data_CurrentBodyRate中有对应四大类表的主键,就将四大类表中对应的数据更新到此表中;如果四大类表中有数据没被包含在此表中,就插入这条数据,是这个意思吧?
    7楼的意思就是逐个表检查,如果存在了,就更新,不存在就插入。
    其中“...”部分省略了表的字段,补充完整,然后把后面的条件(表名和主键字段)随表的不同改一下就好了
      

  7.   

    没关系,可以把两个sql语句拼起来,用“;”分隔,可以一起执行
    string strCommand="update t set.. from tcst_data_CurrentBodyRate t inner join tcst_code_Companies t1 on t1.I_CompanyID= t.I_CurrentBodyID;insert into tcst_data_CurrentBodyRate ...
    select ... from tcst_code_Companies t1 where not exists( select 1 from tcst_data_CurrentBodyRate t where t1.I_CompanyID= t.I_CurrentBodyID );...";
      

  8.   


    朋友理解稍有点误差,可能是我没有表述清楚,如果表tcst_data_CurrentRate中有对应四大类表的主键,就将更新这一记录,具体的更新不是将四大类表中
    对应的数据更新到此表中,而是另外的更新语句,这里我没写出,譬如时间啊,姓名等字段的更新,插入数据的时候也不是插入原来四大类表中的数据,也是另外
    的插入语句,插入的时候会把四大类表中的主键值也插入到tcst_data_CurrentRate的 currentBodyID这一项中,还有其它的插入字段
      

  9.   

    select news_title,num from tb_newsinfo  
     left join 

    select news_Id,count(lw_id)as num 
    from tb_newsinfo join tb_leaveword 
    on tb_newsinfo.news_Id=tb_leaveword.lw_father 
    group by news_Id 
    )temp on tb_newsinfo.news_Id=temp.news_Id 这样就解决问题了,我试过的
    但不知道是否是楼主想要的.
    嘿嘿
      

  10.   

    汗颜,既然来了就说两句吧.
    随便讲讲,偶能讲的只是思路.技术方面,偶只能算是只小菜虫.1.首先你得把你所认为这个项目应该要键的表全部画出来.
    2.然后将那些表分类,再看分别标明表与表之间有什么关联.
    3.再通过你了解的以上信息而决定要产生的数据库的思路.
    4.开始建库建表,首先是大的四个项,然后是单个大项里面的小细节,各个表之间的关系,数据之间的相互相约束, 以及以可能要建的索引,还有优化方面,考虑问题时要多听客户的要求及希望,要知道程序将来的可扩展性也是很重要的,(题外话,一个合格的程序员除了比客户更专业的思维还应该有更长远的眼光)建议你依然画图完成,这样思路会比较清晰.完成上面四项目后才仅仅中介工作的开始.到这时候才算是要开始工作了.5.确认自己上面的一切是可行的,表与表之间的关系就像链条一样环环相扣,并且要多与客户沟通,反复确认,如果可以就用白纸黑字签字画押,嘿嘿!纸上的东西最安全,不怕到时候项目到一半客户又反复,前面与客户拉好关系,后面的工作就好做了.6.开始在纸上写出自己要达到那些要求,将要达到的这些要求分类,然后按照分类进行有规律的视图与存储过程的编写.(经常要查阅的数据可以用视图,而修改方面有多条语句的用存储过程和事务,为了查阅的速度适当的建立索引)一切努力为了拿更多的RMB,嘿嘿.客户就是上帝.  
    就瞎聊到这吧,小菜虫闪人了....
      

  11.   

    事务处理,查询出来的id放到一个字符串数组里,或者HashTable里都可以