2013-03-19 3 views
5

Ich habe eine Datenbanktabelle, die mit der SELECT INTO SQL-Syntax erstellt wird. Die Datenbank befindet sich in Access und besteht aus ungefähr 500.000 Zeilen. Das Problem ist, wenn ich den Join mache, ist die einzige Zeile die ganze Zeile - was ich möchte ist ein Auto-Nummer-ID-Feld als Primärschlüssel.Erstellen Sie eine neue Tabelle und fügen Sie einen Primärschlüssel mit SELECT INTO

Code I derzeit haben, ist so etwas wie:

SELECT INTO new_table 
FROM 
(SELECT * FROM table a, table b WHERE a.name = b.name) 

Ich hatte gehofft, eine Möglichkeit, eine Klausel in meine SELECT INTO-Abfrage hinzufügen, so konnte ich einen Primärschlüssel hinzufügen, und erstellen Sie die Tabelle in einem Durchgang war - Ist das möglich?

Wenn nicht, was ist der beste Weg, dies nur mit SQL zu tun?

+0

Wenn Sie * aus zwei Tabellen auswählen, wird das Fügefeld automatisch zweimal zurückgegeben.Probieren Sie es mit den Feldern aus, die Sie benötigen. –

+0

Ich brauche eine interne autoinkrementierende PK in der Ergebnistabelle – user559142

+0

große Frage, ich würde gerne in der Lage sein, die gleiche Sache zu tun. – jhilden

Antwort

0

Was ist notwendig, um einen Primärschlüssel zu erstellen und gleichzeitig einzufügen?

Sie können einen Primärschlüssel und eine Tabelle zur gleichen Zeit erstellen, aber nicht nach meinem Wissen einfügen. Sie können dies tun.

oder fügen Sie einen Tropfen und erstellen Sie auch, wenn Sie sicherstellen möchten, dass die Tabelle nicht bereits vorhanden ist und dieses Skript ein Bündel ausführen. Eine temporäre Tabelle '# (etwas)' kann vielen der Regeln von permanenten Tabellen folgen, außer dass sie für die Bewegung auf Code-Ebene verwendet werden und anschließend bereinigt werden.

if object_id('(schema).(tablename)') is not null 
    drop table (schema).(tablename) 

Ich schuf einen ständig wachsenden Samen mit 'Identität'. Der Standardwert ist, bei 1 zu beginnen und um 1 zu erhöhen, was 95% der einfachen Primärschlüsselanforderungen der Datenbank bedient. Es wird automatisch erhöht, sodass Sie sich keine Gedanken darüber machen müssen. Sie können auch in nur bestimmte Werte einfügen, wenn Sie mehr mit Dingen wie haben:

insert into table (col1, col2) 

Dadurch entfällt die Notwendigkeit, alles einzusetzen und nur die Spalten, die Sie wollen.

+0

Dies funktioniert nicht. Ist es in Access gültig? – user559142

+0

Sie können dann eingeschränkt sein, da dies in SQL Management Studio durchgeführt wurde. Sie können wahrscheinlich mit der Identität davonkommen, aber ich nehme NICHT den Beschränkungsteil an. – djangojazz

7

Das Hinzufügen einer Primary Key während einer INSERT INTO Anweisung ist nicht möglich, soweit ich weiß. Was Sie jedoch tun können, ist eine Spalte hinzuzufügen, die automatisch inkrementiert, indem Sie die IDENTITY()-Funktion von SQL Server verwenden.

Etwas wie folgt aus:

SELECT 
    ID = IDENTITY(INT, 1, 1), 
    col1, 
    col2 
INTO new_table 
FROM (SELECT * FROM table a, table b WHERE a.name = b.name) 
+1

Es muss einen Weg geben, dies zu einem Primärschlüssel zu machen. – user559142

+0

Nicht definierte Funktionsidentität in Ausdruck ... – user559142

+0

@ user559142 Diese Funktion ist in SS2008 und höher, nicht SQL Azure (noch?) Verfügbar. –

1

In Access ich glaube nicht, dass Sie erreichen können, was Sie in einer einzigen Anweisung wollen. Was ich denke, dass Sie tun müssen, ist ...

  1. Erstellen Sie die neue Tabelle, wie Sie in der Frage beschrieben.

  2. Fügen Sie den Autowert-Spalte wie folgt aus:

    ALTER TABLE [new_table] ADD COLUMN [ID] AUTOINCREMENT NOT NULL

  3. die Säule Sie haben soeben den Primary Key:

    ALTER TABLE [new_table] ADD CONSTRAINT NewTable_PK PRIMÄRSCHLÜSSEL (ID)

Verwandte Themen