Answers:
INSERT INTO Table
( Event_ID
, col2
...
)
SELECT "155"
, col2
...
FROM Table WHERE Event_ID = "120"
在这里,col2,...代表表中的其余列(Event_ID 以外的列)。
这是一个解决方案,您的表中有许多字段,不想输入所有字段都变得抽筋,只需输入所需的字段即可:)
如何将某些行复制到同一表中,而某些字段具有不同的值:
您的代码:
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建议)。
TEMPORARY
关键字创建临时表。CREATE TEMPORARY TABLE
会话(SQL查询序列)完成后,使用会自动删除表。无需删除该表,它也不会与使用相同名称的其他临时表冲突。(例如,实时黑客攻击(我不推荐))
ALTER TABLE temporary_table MODIFY <auto_inc_not_null_field> INT;
将主键更新为Null不会失败。
Exception: null value in column <auto_inc_not_null_field> violates not-null constraint
。我尝试过ALTER TABLE temporary_table ALTER COLUMN <auto_inc_not_null_field> DROP NOT NULL;
假设您的表格还有另外两列:foo和bar
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, "155"
FROM Table
WHERE Event_ID = "120"
如果您的表中有许多列,并且不想键入每个列,则可以使用一个临时表来完成,例如;
SELECT *
INTO #Temp
FROM Table WHERE Event_ID = "120"
GO
UPDATE #TEMP
SET Column = "Changed"
GO
INSERT INTO Table
SELECT *
FROM #Temp