【问题标题】:How to insert new data while keeping most columns value but changing some values dynamically?如何在保留大多数列值但动态更改某些值的同时插入新数据?
【发布时间】:2013-02-16 02:55:01
【问题描述】:

我使用的是 Sql Server 2005。我有这个 tableA 有 70 列和大约 5000 行。我想为模拟目的创建新数据(大约 200 条新记录)。在 70 列中,我只想更改 3 列(TERMID、OUTLET、SNUM)的值,其余的仍然存在。例如

    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 (.... .)

有什么聪明的主意吗?

【问题讨论】:

  • 我不懂规则。什么定义了 PP2 到 PP3 和 P5 = P8 的变化?这是一关吗?
  • 所以我将 Insert INTO TABLEA(COL1 to 70) SELECT (COL1 to 70 then do some changes here) FROM TABLEA?这非常乏味:(还有其他方式吗?

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


【解决方案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

很抱歉给您带来了困惑。

【讨论】:

  • 哇看起来合乎逻辑……我会试试的。让我来吧,为了努力
  • 天哪,我没有为此数据库创建表的权限...必须恳求我的数据库管理员否则真的必须手动完成
  • :) 感谢您的支持 - 如果没有权限,您可能必须输入所有这些内容。如果您想要快速查询以返回表中的所有列名,请运行类似 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' 的命令。这样,您就不必全部输入...祝您好运。
  • 你不需要一个新表,一个通用的表表达式,又名 cte,就可以很好地完成这项工作。
  • 哦,CTE 可能会这样做,谢谢,但我可以对 CTE 执行更新语句吗?
猜你喜欢
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
相关资源
最近更新 更多