SQL将现有/重复行插入表但只更改一个列值?

时间:2017-05-09 13:17:59

标签: sql sql-server select insert

我有一个包含50多列的Audit表,需要通过只更改一个列值(列CreatedDate,将值设置为GETDATE())来插入所需的行(重复)。我知道这可以通过INSERT INTO SELECT * FROM来实现,但是因为有更多的汉50列,代码看起来很麻烦:

INSERT INTO Audit_Table (Col1, Col2, .....CreatedDate, ......, Col50, ...ColN)
SELECT (Col1, Col2, .....GETDATE(), ......, Col50, ...ColN) FROM Audit_Table 
WHERE  Audit_Table.Id = Desired_Id

如果我不应该更改CreatedDate列值,那将非常简单:

INSERT INTO Audit_Table SELECT * FROM Audit_Table WHERE Audit_Table.ID = Desired_Id

有没有其他方法可以复制行并只更改一个/所需的列值?

4 个答案:

答案 0 :(得分:2)

您可以将记录插入临时表,将CreatedDate列更新为GETDATE(),然后将其插入Audit_Table。

答案 1 :(得分:0)

你可以建立你现有的想法。只需复制该行(我假设您有一个自动递增的主键列),然后在单独的查询中更新时间,即。

这样做:

INSERT INTO Audit_Table SELECT * FROM Audit_Table WHERE Audit_Table.ID = Desired_Id

然后:

UPDATE Audit_Table SET CreatedDate = GETDATE() WHERE primaryKeyID = newPrimaryKeyID

希望这有帮助!!!

答案 2 :(得分:0)

没有。在SQL中无法说出* except column_foo

解决方法是生成

SELECT
  col1
, col2
, [...]
, coln
FROM foo;

语句(或部分语句)通过查询数据库的系统目录中的列名称。始终有一个包含所有表的表和一个包含所有列的表。 然后,确保将所需的逗号放在正确的位置(或者在不需要它们的地方删除它们,或者在报告的所有行中生成逗号但是第一个 - 使用ROW_NUMBER() OLAP函数和评估它是否返回1或其他东西)。最后,编辑正确的日期列,将其替换为CURRENT_DATE或数据库当天使用的任何内容。

祝你好运 - 马可

答案 3 :(得分:0)

try below as reference

you can use below statement to copy the all rows,
mysql> insert into newstudent select * from students;


you can use below statement to copy the specific row from table,
mysql> insert into newstudent
    -> select id, name, age, address
    -> from students
    -> where
    -> id = 1248;


you can use below statement to copy the either of the row from table,   
    mysql> insert into newstudent
    -> select id, name, age, address
    -> from students
    -> where
    -> id = 1248 or id=1249;

use limit clause also along with this