Bonjour,
J'ai une table qui a été créée avec ce script :
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 :
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 :
delete infocentre.activites where statut <= 3;
=> 0 lignes lises à jour ! WTF!?
Je lance pour vérifier :
select distinct statut from infocentre.activites;
Et au lieu d'avoir :
-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 :
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