我有一個表有5個字段。 5列之一是PK。我的需求是我需要基於某些列(非重複但不是PK)獲得行,對於所有返回的結果,我需要分配新的PK並保存。如何通過更新兩個字段來插入記錄?
如果我在我的表中有10條記錄。如果我根據某一列獲得10條記錄。我需要爲所有10條記錄分配新的PK並保存。最後在表中會有20條記錄。有沒有執行此操作的任何單個SQL查詢?
謝謝!
我有一個表有5個字段。 5列之一是PK。我的需求是我需要基於某些列(非重複但不是PK)獲得行,對於所有返回的結果,我需要分配新的PK並保存。如何通過更新兩個字段來插入記錄?
如果我在我的表中有10條記錄。如果我根據某一列獲得10條記錄。我需要爲所有10條記錄分配新的PK並保存。最後在表中會有20條記錄。有沒有執行此操作的任何單個SQL查詢?
謝謝!
IF COL1是PK(自動增量列)
insert into table (col1, col2, col3, col4, col5)
select null, col2, col3, col4, col5
from table
where col2 = 'anyvalue' and more conditions... ;
我不知道如果我理解正確的話,你但這樣做你需要什麼?
由於您沒有給出太多細節,因此您必須填寫空格!
INSERT INTO <table> (
pk_col,
col2,
col3,
col4,
col5
)
SELECT <new_pk>,
col2,
col3,
col4,
col5
FROM <table>
WHERE <your search criteria>;
希望它可以幫助...
-- create a sequence to manage the primary keys
create sequence key_sequence;
-- i don't know what data you want in your table
create table tempTable (
myKey int primary key,
myValue varchar(12))
-- create four rows of arbitrary data, they will get primary keys of 1,2,3 and 4
insert into tempTable values (key_sequence.nextval, 'eggs')
insert into tempTable values (key_sequence.nextval, 'bacon')
insert into tempTable values (key_sequence.nextval, 'chips')
insert into tempTable values (key_sequence.nextval, 'salad')
-- you can see the 4 rows
select * from tempTable
-- select all four rows (as no where clause) and re-insert them into the table
-- the sequence will take care of allocating new primary keys
insert into tempTable
select key_sequence.nextval, myValue
from tempTable
-- now you can see eight rows in the table
select * from tempTable
YS是可以的,但是你需要證明UR PK決策邏輯和表模式 – Zia 2012-07-05 10:43:01
如果確定有沒有衝突,你可以使用序列並使用sequence_name.NEXTVAL生成一個PK – 2012-07-05 10:46:01