mssql我有一个数据库表如下:
列:期号 r1 r2 r3 r4 ...r200  类别
值:0103 10  4  8  9 ...  22   A我想做的是:
1、把所有的上期中r1...r200的值都加1
2、把满足条件的列的值变成0假设r2、r3满足条件,那么r2、r3的值就变成03、然后插入下一行中,插入后为:
列:期号 r1 r2 r3 r4  ...r200  类别
值:0103 10  4  8  9  ...  22   A
    0104 11  0  0  10 ...  23   A向各位大虾们请教,我应该怎么用代码实现呀????急急

解决方案 »

  1.   

    insert into 表(期号,r0,r1,r2) select 期号+1,r0,r1,case r2 when 1 then 0 end as r2 from 表 where 期号=0103;
      

  2.   

    给点思路给你,动态构造sql语句,但是这个不行,你自己试一试,我去sql版问问CREATE TABLE tab(期号 VARCHAR(5),r1 INT,r2 INT,r3 INT,r4 INT,r5 INT,类别 VARCHAR(5))
    INSERT INTO tab VALUES('0101',10,4,8,9,22,'A')
    INSERT INTO tab VALUES('0102',10,11,8,9,22,'B')CREATE PROCEDURE UpdateAdd
    AS
      DECLARE @r VARCHAR(100)
      SET @r=''
      DECLARE @result VARCHAR(200)
      DECLARE  @i INT  
      SET  @i=1 
      WHILE @i<6 
        BEGIN  
         SET @r=@r+'r'+CAST(@i AS VARCHAR(2))++'+1'+','
         SET @i=@i+1 
        END
      SELECT @result=SUBSTRING(@r,1,LEN(@r)-1)
      PRINT @result
      INSERT INTO tab 
      SELECT 期号,CAST(@result AS VARCHAR(100)) ,类别 FROM tab WHERE r2<9 AND r3 <9
      
      
      EXEC UpdateAdd
      

  3.   

    我的表已经创建好了
    表名:SDyilou
    列名:期号、r1,r2,r3,r4,r5...r200
    我是想用后台代码来实现插入数据
    protected void Button1_Click(object sender, EventArgs e)
        {
            //连接语句我会写
              System.Data.SqlClient.SqlConnection conn;
            System.Data.SqlClient.SqlCommand cmd;
            string connectionstring = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["sqli08kingdomConnectionString"].ConnectionString;
            string cmdString = ??
            conn = new System.Data.SqlClient.SqlConnection(connectionstring);
            cmd = new System.Data.SqlClient.SqlCommand(cmdString, conn);
              //我不知道怎么写插入语句
        }
      

  4.   

    这个是我的想法,不知道可不可以,
    for(int i = 1;i <= 200; i++)
    {
      if(i == 3 || i ==4)
      {
        cmdstring = "update test2 set r"+ i +"= 0)";
       }
      else{
         cmdstring = "update test2 set r"+ i +"=" +"r"+i+ " + 1)";
        }
      conn = new System.Data.SqlClient.SqlConnection(connectionstring);
      cmd = new System.Data.SqlClient.SqlCommand(cmdString, conn);}
      

  5.   

    存储过程写给你了CREATE TABLE tab(期号 VARCHAR(5),r1 INT,r2 INT,r3 INT,r4 INT,r5 INT,类别 VARCHAR(5))
    INSERT INTO tab VALUES('0101',10,4,8,9,22,'A')
    --先建表,建立完成后再建立存储过程
    CREATE PROCEDURE UpdateAdd
    AS
      DECLARE @r VARCHAR(100)
      SET @r=''
      DECLARE @result VARCHAR(200)
      DECLARE @qihao VARCHAR(10)
      SELECT  @qihao=(SELECT '0'+CAST((CAST(期号 AS int)+1) AS VARCHAR(4)) FROM tab WHERE r2<9 AND r3 <9)
      
      DECLARE  @i INT  
      SET  @i=1 
      WHILE @i<6 
        BEGIN  
         SET @r=@r+'r'+CAST(@i AS VARCHAR(2))++'+1'+','
         SET @i=@i+1 
        END
      SELECT @result=SUBSTRING(@r,1,LEN(@r)-1)
      -- PRINT @result
      INSERT INTO tab 
      EXEC('SELECT '+@qihao+','+@result+',类别 FROM tab WHERE r2<9 AND r3 <9')
      
      EXEC('UPDATE tab SET r2=0,r3 =0 WHERE 期号='+@qihao)
      
      EXEC UpdateAdd  --执行存储过程
      
      SELECT * FROM tab  --查询结果
      

  6.   

    感谢“伤脑筋”给我的回复
    我想您是弄错了我的意图
    这样吧我再说明一下(前边没有说的太清楚)
    我现在需要一个方法:
    pubilic void Insert(string qihao1 ,string qihao2,Arraylist zuhe)
    //qihao1--上一条记录的期号,例子中的1013,qihao2--新插入记录的期号,组合--需要变成0的那些列名,如例子中的r2,r3
    {}
     
      

  7.   

    那你就在Insert函数了update就行了啊
      

  8.   

    pubilic void Insert(string qihao1 ,string qihao2,Arraylist zuhe)
    //qihao1--上一条记录的期号,例子中的1013,qihao2--新插入记录的期号,组合--需要变成0的那些列名,如例子中的r2,r3
    {}
      

  9.   

    在里面根据条件动态构造sql语句,类似这种
    if(i == 3 || i ==4)
      {
        cmdstring = "update test2 set r"+ i +"= 0)";
      }
      else
      {
        cmdstring = "update test2 set r"+ i +"=" +"r"+i+ " + 1)";
      }
      

  10.   

    通过网上查询和楼上几位的提醒
    我终于明白啦
    我这样来做的
    第一步:复制全部数据到下一行insert into tabalename select  * from tabalename where 期号==qihao
    第二步:更新所有数据都加1
    第三步:更新符合条件的数据变成0现在我想的问题是
    有没有办法能直接一步通过条件判断来写插入语句呀