Bonjour,
J'ai une table qui a été créée avec ce script :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 CREATE TABLE [infocentre].[contacts]( [statut] [tinyint] not null, [nom] [nvarchar](80) NOT NULL, [prenom] [nvarchar](40) NULL, [email] [nvarchar](80) NULL, [telephone] [nvarchar](40) NULL, [mobile] [nvarchar](40) NULL, [datemodif] date NOT NULL, [codeclient] [nvarchar](80) NOT NULL, [codecrm] [bigint] NOT NULL, [id_contactcrm] [numeric](27, 0) NOT NULL, primary key (statut, id_contactcrm, codeclient) ) ON [PRIMARY] GO
Dedans, j'ai 8 millions de lignes.
Statut contient les valeurs de 1 à 8, réparties de manière homogène (c'est l'historique glissant du contenu d'une table, statut indiquant l'âge de l'historique).
Suite à un problème d'interface, j'ai besoin de revenir en arrière.
Je lance donc cette commande :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part update infocentre.activites set statut = statut - 3;
Ca tourne un moment, et me dit que ça a mis à jour 8 millions de lignes.
Je lance ensuite :
=> 0 lignes lises à jour ! WTF!?
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part delete infocentre.activites where statut <= 3;
Je lance pour vérifier :
Et au lieu d'avoir :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part select distinct statut from infocentre.activites;
-2
-1
0
1
2
3
4
5
J'ai toujours les valeurs de 1 à 8...
Je veux bien que tinyint soit éventuellement unsigned, mais à ce moment :
- soit ça aurait du planter
- soit repartir à 2^16 à la place des valeurs négative
Pourtant, je n'ai pas eu le moindre message d'erreur... Comment se fait-ce ?
Bon, je m'en suis sorti en faisant :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 delete infocentre.activites where statut <= 3; update infocentre.activites set statut = statut - 3; select distinct statut from infocentre.activites;
Mais j'aimerais quand même comprendre ce qui c'est passé avec mon premier update ???
Partager