我是db的新手,所以我的问题可能不对。
我试图实现的是从表中获取行,编辑两列并插入到同一个表中。
INSERT INTO table_name
(SELECT *
FROM table_name
WHERE TRANSACTION_ID = 1 );
但在添加插入之前我想更新字段
UPDATE table_name
SET UPDATED_DATE = '20161208',
STATUS = 'updated'
WHERE TRANSACTION_ID = 1;
我是否需要编写存储过程来实现此目的?
如果是这样的话应该如何?
答案 0 :(得分:4)
您正在学习数据库。当您使用INSERT
时,您应该始终列出列,除非您确切知道自己在做什么。因此,列出显式列并输入您想要的值:
INSERT INTO table_name( . . ., UPDATED_DATE, STATUS)
SELECT . . ., '20161208', 'updated'
FROM table_name
WHERE TRANSACTION_ID = 1;
您可以在一个声明中执行此操作。
答案 1 :(得分:0)
存储过程通常用于SQL操作(可重用代码),需要通过传递给它的动态值(如果需要)重复执行。
如果您只想在一次更新操作中运行这两个查询,则不建议使用存储过程。您可以将这两个命令作为单个事务运行,并将事务提交为单个Atomic事务。
答案 2 :(得分:0)
您想要实现的是在表格中复制一行并修改此重复行的某些字段?
如果是这样,你需要做这样的事情(不要把TRANSACTION_ID放在字段列表中。如果你有Identity,它通常会自动创建一个ID_TRANSACTION 2):
INSERT INTO TableName (field1, field2, ...)
SELECT * FROM table_name WHERE TRANSACTION_ID = 1
然后:
UPDATE table_name SET UPDATED_DATE = '20161208', STATUS = 'updated' WHERE TRANSACTION_ID = 2;