我不认为这完全可以在 SQL 中完成,而无需费心创建临时表。在内存中执行它应该快得多。请注意,如果您使用临时表路径,则必须为每个函数调用选择一个唯一的表名称,以避免代码同时运行两次并将两行数据混入一个临时表的竞争条件。
我不知道您使用的是哪种语言,但应该可以获得程序中的字段列表。我会这样做:
array_of_field_names = conn->get_field__list;
array_of_row_values = conn->execute ("SELECT... ");
array_of_row_values ["ID"] = new_id_value
insert_query_string = "construct insert query string from list of field names and values";
conn->execute (insert_query_string);
然后你可以将它封装为一个函数,只需指定表、旧 id 和新 id 就可以调用它,它会很神奇。
在 Perl 代码中,下面的代码片段会做:
$table_name = "MYTABLE";
$field_name = "ID";
$existing_field_value = "100";
$new_field_value = "101";
my $q = $dbh->prepare ("SELECT * FROM $table_name WHERE $field_name=?");
$q->execute ($existing_field_value);
my $rowdata = $q->fetchrow_hashref; # includes field names
$rowdata->{$field_name} = $new_field_value;
my $insq = $dbh->prepare ("INSERT INTO $table_name (" . join (", ", keys %$rowdata) .
") VALUES (" . join (", ", map { "?" } keys %$rowdata) . ");";
$insq->execute (values %$rowdata);
希望这可以帮助。