我有一个包含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
有没有其他方法可以复制行并只更改一个/所需的列值?
答案 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