Bonjour, c'est la première fois que je poste sur ce joli site
Alors voilà, j'ai une bête question de syntaxe en SQL.
J'ai une table avec deux champs (string url, date date), qui contiennent... des url et des dates
J'ai une fonction avec laquelle j'insére de nouvelles lignes (une à une) dans cette table, le champ date étant renseigné par la date d'insertion. J'ai donc écrit une requête 'INSERT INTO <ma_table> bla bla' qui semble marcher très bien, là n'est pas le problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <ma_table> url date ------------------------------------------- http://host/url_1.wav 14/05/2008 15:20:39 http://host/url_2.wav 15/05/2008 20:30:43 http://host/url_3.wav 16/05/2008 10:55:12 ...
Ce que je veux, c'est en faire une sorte de cache FIFO. C'est-à dire que si le nombre de lignes de la tables atteint un certain seuil, alors je remplace la ligne la plus ancienne au lieu d'insérer une nouvelle ligne. J'ai donc écrit la requête suivante, dont la syntaxe me semblait correcte :
Ca me retourne l'exception suivante (C#):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 UPDATE <ma_table> SET url = '<mon_url>', date = DateTime.Now WHERE date = (SELECT MIN(date) FROM <ma_table>)
Je cherche à savoir pourquoi. J'ai fait quelques tests, et apparemment ça viendrait du fait que date est à la fois dans SET et dans WHERE. Je vois pour le moment deux solutions sales-mais-qui-devraient-marcher-en-attendant-mieux, en faisant 2 requêtes :ERROR [42000] [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe dans l'instruction UPDATE.
- updater l'url, puis updater la date
- supprimer la ligne, puis en insérer une autre
Mais j'aimerais avoir une solution plus propre. Je débute en SQL, donc vos conseils sont la bienvenue...
Merci d'avance.
Partager