Comment puis-je bulk insert avec SQLite?

Comment puis-je bulk insert avec SQLite?

Je l'ai regardé et il me semble que je fais un insert avec une instruction select. J'ai googlé, regardé les exemples et ils se ressemblent tous comme ils sont la copie des données d'une table à l'autre ou n'est pas compatible avec SQLite. Je veux faire quelque chose comme

"INSERT INTO user_msg_media (recipientId, mediaId, catagory, current_media_date) " +
"VALUES(@mediaId, @catagory, @current_media_date)";
where the value of recipientId is the watcher from each of
"SELECT watcher FROM userwatch WHERE watched=@watched";

J'ai essayé le code ci-dessous et je reçois le message d'erreur "erreur SQLite aucune colonne de ce type: watcher"

        command.CommandText =
            "CREATE TABLE if not exists user_msg_media( " +
            "msgId        INTEGER PRIMARY KEY, " +
            "recipientId  INTEGER, " +
            "mediaId      INTEGER, " +
            "catagory     INTEGER, " +
            "current_date DATE);";
        command.ExecuteNonQuery();

        //user media
        command.CommandText =
            "CREATE TABLE if not exists user_watch( " +
            "indx INTEGER PRIMARY KEY, " +
            "watcher INTEGER, " +
            "watched INTEGER);";
        command.ExecuteNonQuery();
        //...

    command.CommandText = "SELECT watcher FROM user_watch WHERE watched=:watched;";
    command.Parameters.Add(":watched", DbType.Int64).Value = 1;
    command.ExecuteNonQuery(); //is ok

    command.CommandText =
        "INSERT INTO user_msg_media (recipientId, mediaId, catagory, current_media_date) " +
        "SELECT watcher, :mediaId, :category, :current_media_date" +
        "FROM user_watch WHERE watched=:watched;";
    command.Parameters.Add(":mediaId", DbType.Int64).Value = 0;
    command.Parameters.Add(":category", DbType.Int64).Value = 0;
    command.Parameters.Add(":current_media_date", DbType.Int64).Value = 0;
    command.Parameters.Add(":watched", DbType.Int64).Value = 1;
    command.ExecuteNonQuery();
Êtes-vous en utilisant le Système.Les données.Sqlite?
Remarque le CRÉER pour la table usr_msg_media fait une colonne nommée current_date, mais l'INSERTION tente de définir current_media_date à la place: je crois que cette erreur est d'être confondu par SQLite (ça devient confus et des revendications de la colonne manquante est l'observateur de la place), que je peux reproduire le faux message d'erreur - mais si je réparer l'erreur réelle, il fonctionne, consultez l'exemple de code Python dans ma réponse.

OriginalL'auteur | 2009-05-30