如何插入新数据,同时保持大多数列值但动态更改某些值?

时间:2013-01-17 03:42:43

标签: sql sql-server sql-server-2008 tsql

我正在使用Sql Server 2005.我有这个tableA有70列和大约5000个。我想为模拟目的创建新数据(大约200条新记录)。在70列中,我只想更改剩下的3列(TERMID,OUTLET,SNUM)的值。 E.g

    TABLEA  
    SNO  COMPANY.......TERMID........OUTLET........SNUM.....  
     1     ABC           PP2          P1-P5         P5  
     1     ABC           PP2          P1-P5         P4  
     2     ABC           PP2          P1-P5         P4  
     1     ABC           PP2          P1-P5         P3  
     3     ABC           PP2          P1-P5         P3  

所以我想保留新记录的所有值,除了将所有TERMID从PP2更改为PP3以及所有出口从P1-P5更改为P6-P8。至于SNUM,所有P5都将成为P8,P4将成为P7,P3将成为P6。含义在执行插入后,TABLEA将如下所示:

      TABLEA  
    SNO  COMPANY.......TERMID........OUTLET........SNUM.....  
     1     ABC           PP2          P1-P5         P5  
     1     ABC           PP2          P1-P5         P4  
     2     ABC           PP2          P1-P5         P4  
     1     ABC           PP2          P1-P5         P3  
     3     ABC           PP2          P1-P5         P3  
     1     ABC           PP3          P6-P8         P8  
     1     ABC           PP3          P6-P8         P7  
     2     ABC           PP3          P6-P8         P7  
     1     ABC           PP3          P6-P8         P6  
     3     ABC           PP3          P6-P8         P6  

我不想手动执行此操作,因为200行会非常繁琐。这可能是使用SQL语句吗?

我有用子查询编写正常的插入语句,但我想这将是繁琐的,甚至可能更多写INSERT INTO TABLEA(COL1,COL2,....... COL70)VALUE(.... 。)

有什么好主意吗?

1 个答案:

答案 0 :(得分:1)

我只是重新阅读您的回复,并意识到您正在尝试在当前表中插入记录,而不是创建新表。

怎么样:

SELECT * 
INTO #NewTable 
FROM TABLEA;

UPDATE #NewTable 
SET TERMID = 'PP3', 
    OUTLET= 'P6-P8', 
    SNUM = CASE 
               WHEN SNUM = 'P5' THEN 'P8'
               WHEN SNUM = 'P4' THEN 'P7'
               WHEN SNUM = 'P3' THEN 'P6'
           END;

INSERT INTO TABLEA 
SELECT * 
FROM #NewTable

很抱歉这个混乱。