Frage

Ich möchte eine Zeile duplizieren, natürlich nicht die Schlüssel, ohne die Feldnamen explizit zu verwenden.
Gibt es eine SQL-Methode oder muss ich die Feldnamen per Code aufzählen?

Ich möchte Feldnamen nicht explizit verwenden, da ich Code- und Datenbankabhängigkeiten minimieren möchte.

Ich werde es im Ms Access 2003 verwenden.Ich erwähne es für den Fall, dass es keinen Standardweg gibt.

War es hilfreich?

Lösung

INSERT INTO `<table>` (column1, column2, ...) -- Not IDENTITY columns
SELECT column1, column2, ... FROM ...

Dies ermöglicht es Ihnen auch Ersatzwerte für die Primärschlüsselspalten einfügen, etc. Ich habe diese verwendet, zusammen mit einem allgemeinen Tabellenausdruck, eine Reihe von Testdaten aus dem Monat Februar zu nehmen, und sie so zu tun, bin wirklich von Juni.

Ich weiß, Sie sagten, Sie es ohne die Feldnamen tun wollen, aber ich glaube nicht, Sie können. Es ist auch keine gute Idee, da es Sie in der Reihenfolge der Spalten binden würde.

Andere Tipps

Wenn Sie keine unique zu befürchten:

INSERT INTO <table> (SELECT * FROM <table> WHERE <condition>)

Ansonsten Antwort John Saunders ist wahrscheinlich die beste Wahl.

Wenn Ihre Primärschlüsselfelder automatische Identifikatoren haben, dann könnten Sie auch in der Lage sein, Skript, das System für Felder interogate, die nicht in der PK, und verwenden Sie die vorhandenen Werte für diejenigen, die nicht und legt nur die Einsen (oder einfügen null für die PK-Felder).

Folglich glaube ich nicht, es wird eine „Standard“ Art und Weise sein.

Ich bin kein Zugang Person, aber in SQL Server können Sie "Script-Tabelle als -> Einfügen in" wählen in SQL Server Management Studio. Sie können dies leicht ändern Sie die Zeilen, die Sie wollen in eine INSERT INTO SELECT-Anweisung zu filtern.

Vielleicht so etwas wie dies existiert in Access?

Wie Leute vor mir gesagt haben, können Sie tun, „INSERT INTO TBL SELECT * FROM TBL X = Y“ und Sie werden eine Reihe bekommen. Und dies wird fehlschlagen, wenn Sie einen Primärschlüssel haben.

Wenn Sie keine PK haben, dann haben Sie wahrscheinlich größere Probleme.

Ist das eine verknüpfte Tabelle? Wenn ja, gibt es keine Datenbank Abhängigkeiten, da Sie mit einer ODBC-Verbindung handelt. In diesem Fall können Sie einfach diese verwenden, um eine Liste der Spalten für die Tabelle zu erhalten:

SELECT TOP 0 * FROM TBL (verlinkter TBL wird eine Rundfahrt mit dem Server benötigen)
Sie erhalten einen leeren Re-Cord, und Sie wiederholen nur durch die Spalten.

Ms Access 2003 orientiert Lösung

Ich habe ein Formular, in dem der Benutzer einen Knopf drücken kann, eine neue Version des aktuellen Datensatz zu erstellen.
Der Teil in MS Access ist einfach:

DoCmd.GoToRecord , , acNewRec

Jetzt muss ich alle Felder auf dem Formular aktualisieren (Kontrollen sind bind mit Tabellenfelder) mit Ausnahme der Schlüssel, das heißt „id“ -Feld, mit Daten aus einem anderen Datensatz.
Ich kam mit der unten Routine, die gut für mich gearbeitet:

Private Sub UpdateRow(tblname As String, key_name As String, key_value As String)
    Dim Rst As Recordset
    Dim field As field

    Set DB = CurrentDb
    Set Rst = DB.OpenRecordset("select * from " & tblname & " where " & _
      key_name & "=" & key_value, dbOpenDynaset)

    For Each field In Rst.Fields
       If field.Name <> key_name Then
           Form(field.Name) = field
       End If
    Next field

    Rst.Close
    Set Rst = Nothing
    Set DB = Nothing
End Sub


Und ich benutze es wie folgt aus:

DoCmd.GoToRecord , , acNewRec
UpdateRow "TableName", "KeyName", "some_previous_key_value"
Form.Refresh

Sie müssten die Feldnamen für die Schlüssel explizit angeben, wenn Sie Ersatzwerte angeben, daher ist eine „Standard“-Methode einfach nicht möglich.

...es sei denn, alle Ihre Tabellen haben einen einzigen Schlüssel, alle mit demselben Namen (ID ist beliebt), und jeder Schlüssel besteht aus einer einzelnen Spalte mit der Eigenschaft IDENTITY (automatische Nummerierung). In diesem Fall hätten Sie tatsächlich keine Schlüssel überhaupt, lediglich eine Möglichkeit, den IDENTITY-Wert zu verwenden, um Ihre doppelten Zeilen eindeutig zu identifizieren!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top