问一个SQL的UPDATE语句:
FOR(INT I=0;I<DATASET11.表;I++)
{
da.updatecommand.commandtext="UPDATE 表 SET 序号="+(I+1)
da.updatecommand.ExecuteNonQuery();

目的是使表中所有序号按顺序赋为0,1,2,3,4。
这行UPDATE语句怎么写?问题在于如何写UPDATE的WHERE子语句???

解决方案 »

  1.   

    FOR(INT I=0;I<DATASET11.表;I++)
    {
    da.updatecommand.commandtext="UPDATE 表 SET 序号="+(I)+"WHERE 条件;"
    da.updatecommand.ExecuteNonQuery();
    } //如UPDATE tableSET ID=9999 WHERE NAME='名字';
      

  2.   

    da.updatecommand.commandtext="UPDATE 表 SET 序号="+(I).Tosting()+"WHERE 条件;"
      

  3.   

    da.updatecommand.commandtext="UPDATE 表 SET 序号="+(I)+"WHERE 条件;"
    就是这个“条件”不会写啊
    确实没有主键,序号不能做主键,因为可能会删除中间一行记录,删除后要重新按顺序设一下序号,即成为1、2、3、4、5、6、7。
    因为在循环里
    这个语句循环时第一次应该是:where 第一条记录第二次应该是:where 第二条记录第三次应该是:where 第三条记录
    我知道这样写非常非常不效率,但试过ASSCESS+VS2005环境,操作DATASET后,再 da.update(dataset11,"表1")不能把dataset里的“表1”内容写回到库里,没有办法才这样写,好在这个表行数不多
      

  4.   

    你至少可以到数据库里给这个表增加一个 Identity 列。
      

  5.   

    增加一个列也没法写出这个条件啊,因为这个键值无法预料,我咋记得UPDATE有个参数可以指定操作几行记录,有没有指定第几行记录的参数?
      

  6.   

    如果不是为了回答你那个问题“Where子句怎么写”,可以这样写:
    da.updatecommand.commandtext=@"
      declare @ord int;
      update [表] set @ord=case when @ord is null then 1 else @ord+1 end,[序号]=@ord
        order by [序号];";
    da.updatecommand.ExecuteNonQuery();
      

  7.   

    因为这个键值无法预料
    ——————————————————————————————————————
    用不着预料。首先你要把原来数据至少“序号”这一列读出来到 DataTable,比如对1、2、4、5、6顺序读出的数据写到DataTable里,然后你的循环写回的是命令:
      UPDATE 表 SET 序号=1 WHERE 序号=1  
      UPDATE 表 SET 序号=2 WHERE 序号=2
      UPDATE 表 SET 序号=3 WHERE 序号=4  
      UPDATE 表 SET 序号=4 WHERE 序号=5
      UPDATE 表 SET 序号=5 WHERE 序号=6  至于说对于1、2、4、5、6、7顺序读出的数据,写回的命令自然是:
      UPDATE 表 SET 序号=1 WHERE 序号=1  
      UPDATE 表 SET 序号=2 WHERE 序号=2
      UPDATE 表 SET 序号=3 WHERE 序号=4  
      UPDATE 表 SET 序号=4 WHERE 序号=5
      UPDATE 表 SET 序号=5 WHERE 序号=6  
      UPDATE 表 SET 序号=6 WHERE 序号=7你的程序才不需要读出的序号是不是连续的,只要按从小到大的顺序就行。
      

  8.   

    我用的是ACCESS,不能写存储过程吧
      

  9.   

    sorry!写错了,应该是读出 Identity 这一列,假设名字叫做 Key,写回的命令就是;  UPDATE 表 SET 序号=1 WHERE key=1  
      UPDATE 表 SET 序号=2 WHERE key=2
      UPDATE 表 SET 序号=3 WHERE key=4  
      UPDATE 表 SET 序号=4 WHERE key=5
      UPDATE 表 SET 序号=5 WHERE key=6  至于说对于1、2、4、5、6、7顺序读出的数据,写回的命令自然是:
      UPDATE 表 SET 序号=1 WHERE key=1  
      UPDATE 表 SET 序号=2 WHERE key=2
      UPDATE 表 SET 序号=3 WHERE key=4  
      UPDATE 表 SET 序号=4 WHERE key=5
      UPDATE 表 SET 序号=5 WHERE key=6  
      UPDATE 表 SET 序号=6 WHERE key=7这样就能避免[序号]列的问题。
      

  10.   

    哈哈,我咋没想到,老想着要WHERE都能WHERE到呢,搞定
    要好好学学存储过程了,你有电子教程吗?推荐一下
      

  11.   

    我写的那个复杂一点的“Update语句”例子,Access的Jet-SQL是不支持的。你用这个 Identity 列的方法来写吧。