382 votes

Insérer une nouvelle colonne dans une table en sqlite ?

J'ai un tableau avec des colonnes name , qty , rate . Maintenant, je dois ajouter une nouvelle colonne COLNew entre les name y qty colonnes. Comment ajouter une nouvelle colonne entre deux colonnes ?

3voto

Hirabayashi Taro Points 723

J'étais confronté au même problème et la deuxième méthode proposée dans la réponse acceptée, comme indiqué dans les commentaires, peut être problématique lorsqu'il s'agit de clés étrangères.

Ma solution consiste à exporter la base de données vers un fichier sql en veillant à ce que les instructions INSERT incluent les noms des colonnes. Je le fais en utilisant DB Browser for SQLite qui a une fonction pratique pour cela. Après cela, il vous suffit de modifier l'instruction create table et d'insérer la nouvelle colonne à l'endroit voulu, puis de recréer la base de données.

Dans les systèmes de type *nix, il s'agit simplement de quelque chose de l'ordre de

cat db.sql | sqlite3 database.db

Je ne sais pas si cela est réalisable avec de très grandes bases de données, mais cela a fonctionné dans mon cas.

0voto

Grendel Points 1214

J'ajoute rarement des réponses à des questions vieilles de 11 ans. Cela dit, la réponse qui a reçu beaucoup de votes contient une ligne de code trompeuse. Je dis trompeuse parce que je l'ai essayée et n'ai pas réussi. Voici la ligne de code à laquelle je fais référence.

ALTER TABLE {tableName} RENAME TO TempOldTable

Voici la ligne que j'ai utilisée lors de ma première tentative d'ajout d'une colonne dans une table de base de données qui avait déjà été créée. Cela a ÉCHOUÉ, mais la question du POURQUOI est peut-être plus pertinente. En tout cas, voici la ligne de code qui a échoué.

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

Voici donc le code final qui ajoute une nouvelle colonne, dans mon cas un type 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

Remarquez que la STRING sqlCmd est une seule et même chaîne. Juste au cas où quelqu'un aurait essayé la réponse acceptée !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X