Ich möchte eine Zeile duplizieren, nicht die Schlüssel natürlich, ohne die Feldnamen explizit zu verwenden.
Gibt es eine SQL-Art oder muss ich die Feldnamen durch Code aufzählen?
Ich möchte nicht explizit Feldnamen verwenden, weil ich Code und DB-Abhängigkeiten minimieren möchte.
Ich werde es in der Ms Access 2003 verwenden. Ich erwähne es, falls kein Standard Weg existiert.Gibt es eine Standardmethode zum Duplizieren einer Zeile in einer Datenbanktabelle?
Antwort
INSERT INTO `<table>` (column1, column2, ...) -- Not IDENTITY columns
SELECT column1, column2, ... FROM ...
Dies erlaubt es Ihnen auch Ersatzwerte für die Primärschlüsselspalten einfügen usw. habe das ich verwendete, zusammen mit einem allgemeinen Tabellenausdruck, eine Reihe von Testdaten aus dem Monat Februar zu nehmen, und so zu tun, als wären sie wirklich von Juni.
Ich weiß, Sie sagten, Sie wollen es ohne die Feldnamen tun, aber ich glaube nicht, dass Sie können. Es ist auch keine gute Idee, da es Sie an die Reihenfolge der Spalten binden würde.
Wenn Sie keine unique befürchten:
INSERT INTO <table> (SELECT * FROM <table> WHERE <condition>)
Ansonsten John Saunders' answer ist wahrscheinlich die beste Wahl.
-1: Funktioniert nicht, wenn Primärschlüssel oder eindeutige Bedingungen vorhanden sind. –
Er bat um eine doppelte Zeile, ohne irgendwelche Feldnamen zu erwähnen; Das Arbeiten mit eindeutigen Einschränkungen verhindert, dass Sie ein exaktes Duplikat erhalten. Dazu müssen Sie die Feldnamen angeben, die Sie kopieren möchten. –
Dann ist sicherlich die richtige Antwort, @Noah, "Nein, du kannst es nicht tun". – paxdiablo
Wenn Ihre Primärschlüsselfelder automatische Bezeichner haben, können Sie Skripts erstellen, um das System nach Feldern abzufragen, die nicht in der PK sind, und die vorhandenen Werte für diejenigen verwenden, die diese nicht einfügen (oder Einfügen von null
für die PK-Felder).
Folglich denke ich nicht, dass es einen "Standard" Weg geben wird.
Ich bin keine Access-Person, aber in SQL Server können Sie wählen "Skripttabelle als -> Einfügen in" in SQL Server Management Studio. Sie können dies leicht ändern, um die gewünschten Zeilen in eine INSERT INTO SELECT-Anweisung zu filtern.
Vielleicht existiert so etwas in Access?
Ich bin auch kein Access-Person :) ok, ich werde es überprüfen. –
Keine solche Einrichtung existiert in Access. Oder Jet/ACE, für diese Angelegenheit. –
Das ist eine Schande, ich denke, Sie könnten die Tabelle in SQL Server importieren und dann das Skript erstellen und in Access ausführen, aber das ist wahrscheinlich mehr Aufwand, als es wert ist, und nimmt an, dass der Benutzer SQL Server hat. – RichardOD
Wie die Leute vor mir gesagt haben, können Sie tun "INSERT IN TBL SELECT * Von TBL WHERE X = Y" und Sie erhalten eine Zeile. Und dies wird fehlschlagen, wenn Sie einen Primärschlüssel haben.
Wenn Sie kein PK haben, haben Sie wahrscheinlich größere Probleme.
Ist dies eine verknüpfte Tabelle? Wenn dies der Fall ist, gibt es keine Datenbankabhängigkeiten, da es sich um eine ODBC-Verbindung handelt. In diesem Fall können Sie diese leicht 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 durchlaufen nur die Spalten.
1,1s/Primärschlüssel/Unique Constraint/- Ein Primärschlüssel ist nur eine Art von eindeutiger Constraint. – paxdiablo
Ms Access 2003 orientierte 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 von einigen anderer Rekord.
kam ich auf die 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 benötigen würde für die Feldnamen explizit liefern die Schlüssel, wenn Sie Ersatzwerte liefern, also ein "Standard" Weg ist einfach nicht möglich.
... es sei denn, alle Ihre Tabellen haben einen einzigen Schlüssel, alle mit dem gleichen Namen (ID ist beliebt), und jeder Schlüssel besteht aus einer einzigen Spalte mit der IDENTITY (autonumber) -Eigenschaft, in welchem Fall Sie in Tatsächlich haben sie überhaupt keine Schlüssel, nur eine Möglichkeit, den IDENTITY-Wert zu verwenden, um Ihre doppelten Zeilen eindeutig zu identifizieren!
- 1. Gibt es eine Standardmethode zum Verknüpfen mit einer externen Website?
- 2. Gibt es eine Standardmethode zum Konvertieren einer Klasse in eine Zeichenfolge?
- 3. Gibt es eine Standardmethode zum Lesen einer Datei in Play, die auch in der Produktionsumgebung funktioniert?
- 4. Wie lösche ich eine Zeile in einer SQLite-Datenbanktabelle?
- 5. Gibt es eine Standardmethode zum Abfragen der EGL-Fehlerzeichenfolge?
- 6. Standardmethode zum statischen Signieren einer Webseite
- 7. Gibt es eine Standardmethode zum Definieren einer JDBC-Datenquelle für Java EE-Container?
- 8. Gibt es eine Standardmethode zum Bereitstellen einer Anwendung mit SQL Server Express?
- 9. Eine Zeile in SQL duplizieren?
- 10. Gibt es eine .NET-Standardmethode zum Testen, ob eine SqlConnection-Zeichenfolge funktioniert?
- 11. R: Teilen und Duplizieren einer Zeile
- 12. Apache Camel Beispiel zum Einfügen einer Zeile in eine Tabelle
- 13. Gibt es eine Standardmethode, um alte Python-Versionen zu deklarieren?
- 14. Gibt es eine Standardmethode für das Audit-Tracking in Grails?
- 15. Speichern einer PHP-Suche in eine Datenbanktabelle
- 16. Gibt es einen Namespacing der Datenbanktabelle?
- 17. Gibt es eine übliche Technik zum Zeichnen einer "dehnbaren" Linie
- 18. Gibt es eine Möglichkeit, die Daten beim Aktualisieren einer Datenbanktabelle mit Laravel 5 zu speichern?
- 19. openoffice: Zeilen einer Tabelle in Writer duplizieren
- 20. Gibt es eine Standardmethode zur Änderungsverfolgung mit einer Knockout-gebundenen Seite?
- 21. Gibt es eine Möglichkeit, Änderungen in einer MySQL-Datenbanktabelle mit Java und JDBC zu überwachen?
- 22. Verwenden einer Datenbanktabelle als Warteschlange
- 23. Gibt es eine Standardmethode zum Speichern von XY-Daten in Python?
- 24. Gibt es eine Standardmethode zum Verschieben eines Bereichs in einen Vektor?
- 25. Gibt es eine Standardmethode zur Implementierung von "Vetoable" -Ereignissen?
- 26. SQL duplizieren eine Zeile und dann aktualisieren
- 27. Spring MVC Form-Tags: Gibt es eine Standardmethode zum Hinzufügen von "Keine Auswahl"?
- 28. Wie lautet die aktuelle Standardmethode zum Bereitstellen einer Rails App?
- 29. Schlüssel/Wert-Paare in einer Datenbanktabelle
- 30. Gibt es eine Möglichkeit zum Hibernieren einer Anwendung?
Ja, hör auf zu weinen und schreibe einen Code :-) +1. – paxdiablo
John, diese Art von Code möchte ich vermeiden. Vielleicht erzeuge ich es automatisch mit VBA-Code. –
@Nick D. Du musst. Es gibt keine generische Art zu sagen: Fügen Sie alle Spalten ein, außer die, die ich nicht haben möchte. –