2012-04-14 7 views
1

Ich habe eine Tabelle A gefüllt mit Datensätzen. Ich habe eine Tabelle B mit denselben Spalten erstellt, und ich möchte den gesamten Inhalt von A nach B kopieren. Tabelle A hat jedoch einen automatisch inkrementierten Schlüssel, also wenn ich die ersten drei Datensätze (1, 'itemA') (2, 'itemB ") (5," itemE ") (unter der Annahme, dass 3,4,5 später gestrichen wurde). Diese Rekords werden in Tabelle B als (1, 'itemA') (2, 'itemB') (3, 'itemE') eingefügt. Gibt es eine Möglichkeit, sie genau gleich einzufügen?Eine Tabelle in eine andere Tabelle kopieren, aber denselben Autoinkrementschlüssel beibehalten

Eine andere Sache ist, Tabelle A auf mySql ist, und Tabelle B ist auf MS SQL Server

+1

php_und_ vb.net? "Ja wirklich?" Wenn Ihre Frage nichts mit diesen Programmiersprachen zu tun hat, warum markieren Sie sie mit ihnen? – Oded

Antwort

3

Die Antworten oben sind gut, aber auf MS SQL können Sie nicht Autoinkrement Wert legen, es sei denn, wenn Sie identiy_insert ausführen deaktivieren:

SET IDENTITY_INSERT stock OFF;

INSERT INTO stock (stock_id,stock_item) VALUES (5,'itemE');

SET IDENTITY_INSERT stock ON;

Dies ist EXCATLY, was ich gesucht habe. Vielen Dank an all :)

7

AFAIK mysql erlauben, in auto_increment Feld einfügen, so dass Sie Anweisung wie

insert into table2 (id, name) select id, name from table1 

aber später verwenden können, wenn Sie in Tabellenwerte mit generierten auto_inc einfügen müssen, müssen Sie Satz auto_increment in table2 mit dem Wert von auto_inc von table1

alter table table2 AUTO_INCREMENT = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = $dbName AND TABLE_NAME = 'table1') 
+1

Ich glaube nicht, dass Sie den Wert von AUTO_INCREMENT ändern müssen, es wird normalerweise einen Wert von max (Auto-Inkrement-Spalte) + 1 haben. Http://sqlfiddle.com/#!2/9a453/1 –

+0

danke für Ihre Hilfe – Haz

+0

die zweite Anweisung funktioniert nicht auf mySql – Haz

4

Ja.

create table b like a; 
insert into b select * from a; 

http://sqlfiddle.com/#!2/a344a/1

+1

Vielen Dank für Ihre Hilfe. Dies funktioniert nur, nachdem Sie IDENTITY_INSERT OFF gesetzt haben – Haz

0

Bei Tisch mit dem Namen Test und Spalten (id AutoInc, col1, col2, col3) Bei Tisch mit dem Namen test2 und Spalten (id AutoInc, col4, COL5, Sp6)

INSERT INTO test(col4, col5, col6) SELECT col4, col5, col6 FROM test2;