422 Stimmen

Neue Spalte in Tabelle in Sqlite einfügen?

Ich habe eine Tabelle mit Spalten name , qty , rate . Jetzt muss ich eine neue Spalte hinzufügen COLNew zwischen den name y qty Spalten. Wie kann ich eine neue Spalte zwischen zwei Spalten einfügen?

3voto

Hirabayashi Taro Punkte 923

Ich stand vor dem gleichen Problem und die zweite Methode, die in der akzeptierten Antwort vorgeschlagen wurde, kann, wie in den Kommentaren erwähnt, problematisch sein, wenn es um Fremdschlüssel geht.

Meine Abhilfe besteht darin, die Datenbank in eine SQL-Datei zu exportieren und dabei sicherzustellen, dass die INSERT-Anweisungen Spaltennamen enthalten. Ich verwende dazu DB Browser für SQLite die eine praktische Funktion dafür hat. Danach müssen Sie nur noch die Anweisung create table bearbeiten und die neue Spalte dort einfügen, wo Sie sie haben wollen, und die Datenbank neu erstellen.

In *nix-ähnlichen Systemen ist es einfach etwas in der Art von

cat db.sql | sqlite3 database.db

Ich weiß nicht, inwieweit dies bei sehr großen Datenbanken möglich ist, aber in meinem Fall hat es funktioniert.

1voto

Vector Punkte 2758

Ich füge nur selten Antworten auf 11 Jahre alte Fragen hinzu. Allerdings enthält die Antwort mit den vielen Stimmen eine irreführende Codezeile. Ich sage irreführend, weil ich es versucht habe und keinen Erfolg hatte. Hier ist die Code-Zeile, auf die ich mich beziehe.

ALTER TABLE {tableName} RENAME TO TempOldTable

Dies ist die Zeile, die ich in meinem ersten Versuch, eine Spalte in eine DB-Tabelle hinzuzufügen, die bereits erstellt wurde, ausprobiert habe. Es ist fehlgeschlagen, aber WARUM könnte eine bessere Frage sein. Wie auch immer, hier ist die fehlgeschlagene Zeile des Codes.

   Dim tb As String = "IncomeTable"
   Dim sqlCmd As String = "$ALTER TABLE" '{tb}' "ADD COLUMN itNumVisit INTEGER"

Hier ist also der endgültige Code, der eine neue Spalte hinzufügt, in meinem Fall vom Typ INTEGER.

    Private Sub btnCopyTable_Click(sender As Object, e As EventArgs) Handles btnCopyTable.Click

    Dim sqlCmd As String = "ALTER TABLE IncomeTable ADD COLUMN itNumVisit INTEGER"
    Try
        Using conn As New SQLiteConnection($"Data Source = '{gv_dbName}';Version=3;")
            conn.Open()

            Using cmd As New SQLiteCommand(sqlCmd, conn)

                cmd.ExecuteNonQuery()
            End Using
        End Using

    Catch ex As Exception
        MsgBox("It Failed")
    End Try
End Sub

Beachten Sie, dass der STRING sqlCmd ein einziger String ist. Nur für den Fall, dass jemand die akzeptierte Antwort ausprobiert hat!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X