日期:2014-05-18  浏览次数:20397 次

mssql数据库
mssql

我有一个数据库表如下:
列:期号 r1 r2 r3 r4 ...r200 类别
值:0103 10 4 8 9 ... 22 A

我想做的是:
1、把所有的上期中r1...r200的值都加1
2、把满足条件的列的值变成0

假设r2、r3满足条件,那么r2、r3的值就变成0

3、然后插入下一行中,插入后为:
列:期号 r1 r2 r3 r4 ...r200 类别
值:0103 10 4 8 9 ... 22 A
  0104 11 0 0 10 ... 23 A

向各位大虾们请教,我应该怎么用代码实现呀????

急急

------解决方案--------------------
存储过程写给你了
SQL code

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  --查询结果