我想要复制大量的行,但我需要更改一个字段。
我可以选择要复制的行:
select * from Table where Event_ID = "120"
现在,我想在将Event_ID
设置为155
的同时复制所有这些行并创建新行。我怎么能做到这一点?
答案 0 :(得分:229)
INSERT INTO Table
( Event_ID
, col2
...
)
SELECT "155"
, col2
...
FROM Table WHERE Event_ID = "120"
此处,col2,...表示表格中剩余的列( Event_ID除外)。
答案 1 :(得分:126)
这是一个解决方案,你的表中有很多字段,不想因为输入所有字段而引起手指抽筋,只需键入所需的字段:)
如何将某些行复制到同一个表中,某些字段具有不同的值:
您的代码:
CREATE table temporary_table AS SELECT * FROM original_table WHERE Event_ID="155";
UPDATE temporary_table SET Event_ID="120";
UPDATE temporary_table SET ID=NULL
INSERT INTO original_table SELECT * FROM temporary_table;
DROP TABLE temporary_table
常规方案代码:
CREATE table temporary_table AS SELECT * FROM original_table WHERE <conditions>;
UPDATE temporary_table SET <fieldx>=<valuex>, <fieldy>=<valuey>, ...;
UPDATE temporary_table SET <auto_inc_field>=NULL;
INSERT INTO original_table SELECT * FROM temporary_table;
DROP TABLE temporary_table
简化/简明代码:
CREATE TEMPORARY TABLE temporary_table AS SELECT * FROM original_table WHERE <conditions>;
UPDATE temporary_table SET <auto_inc_field>=NULL, <fieldx>=<valuex>, <fieldy>=<valuey>, ...;
INSERT INTO original_table SELECT * FROM temporary_table;
由于临时表的创建使用TEMPORARY
关键字,因此会话结束时会自动删除它(如@ ar34z建议的那样)。
答案 2 :(得分:38)
假设您的表有另外两列:foo和bar
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, "155"
FROM Table
WHERE Event_ID = "120"
答案 3 :(得分:10)
如果表中有大量列,并且不想输出每个列,则可以使用临时表来执行此操作,例如;
SELECT *
INTO #Temp
FROM Table WHERE Event_ID = "120"
GO
UPDATE #TEMP
SET Column = "Changed"
GO
INSERT INTO Table
SELECT *
FROM #Temp
答案 4 :(得分:1)
嘿如何复制所有字段,将其中一个字段更改为相同的值+其他字段。
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, Event_ID+"155"
FROM Table
WHERE Event_ID = "120"
____
答案 5 :(得分:0)
只要Event_ID为Integer,请执行以下操作:
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, (Event_ID + 155)
FROM Table
WHERE Event_ID = "120"
答案 6 :(得分:0)
添加@DaveTheBFG 的答案: 如果您有标识列(以下示例中的“Table_PK”),则 INSERT 行将失败,但您可以执行以下操作(特定于 SQL Server,但该概念可能适用于其他数据库):
SELECT *
INTO #Temp
FROM Table WHERE Event_ID = "120"
UPDATE #TEMP
SET Column = "Changed"
ALTER TABLE #TEMP DROP COLUMN Table_PK
EXEC sp_executesql N'INSERT INTO Table SELECT * FROM #Temp'