table1ID   index
1      1
5      5
7      3
8      5
9      9
10     1
11     10
.       .
.       .
.       .将表更新为:
ID   index
1      1
5      2
7      3
8      4
9      5
10     6
11     7
.       .
.       .
.       .就是将:  select * from Table1 ORDER BY ID ,排序后的序号写入相应index
求SQL语句

解决方案 »

  1.   

    个人认为好像只能用Cursor(如果非要在SQL语句中完成的话)DECLARE @ID INT, @index INT
    SET @index = 0DECLARE CUR CURSOR FOR
    SELECT ID FROM TABLE1
    ORDER BY IDOPEN CUR
    FETCH NEXT FROM CUR INTO @IDWHILE @@FETCH_STATUS = 0
    BEGIN
      SET @index = @index + 1
      UPDATE TABLE1 SET [index]=@index WHERE ID=@ID
      FETCH NEXT FROM CUR INTO @ID
    ENDCLOSE CUR
    DEALLOCATE CUR但是数据量大的时候,不建议用SQL语句完成这个操作,因为Cursor的速度比较慢。
      

  2.   

    设个自增变量,然后用此变量去更新index,update语句后的Where id in (select * from table order by table.id)
      

  3.   

    我干脆建立一上临时表TempTalbe,记录数和table1的记录数一样.然后就好说了
    表TempTalbe
    index(自动编号)
    1
    2
    3
    4
    5
    6
    7
    .
    .
    .
      

  4.   

    一个表只能有一个自动编号, lr2651注意一下,table1的ID以经是一个自动编号了
      

  5.   

    将sql语句放到一个循环中通过变量控制:
    for i=0 to 20
    set rs=server.createobject("adodb.recordset")
    sql="update t1 set index="&i&" where id="&id
    rs.open sql,conn,1,1
    i=i+1
      

  6.   

    把该表读取出来,放到datatable里面,然后,循环读取此数据集
    DataTable datatable1 = 根据SQL语句取得的数据集
    for(int i=0;i<datatable1.Rows.Count;i++)
    {
    sql = "update table set index = " + (i+1) + " where id=" + datatable1.Rows[i][0].ToString() + "";
    //执行SQL语句
    }
      

  7.   

    把表中数据读到dataset11中,也可以,然后在通过sqlcommand.executequery,把值写会到表中
    for(int i=0;i<dataset11.tables(0).Rows.Count;i++)
    {
    sql = "update table set index = " + (i+1) + " where id=" + datatable1.Rows[i][0].ToString() + "";
      

  8.   

    我想了半天,楼主用的是access,不能用存储过程,除了楼上的方法,单用sql语句,很难实现啊
      

  9.   

    你建立临时表的方法是解决没有嵌套子查询功能的SQL的最好方法。