Bonjour,
J'aimerais connaître vos astuces concernant un bug que M$ ne compte pas corriger.
Un bon "dessin" avant discourt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 ; WITH Binome(n, f) AS ( SELECT 1, 'a' UNION ALL SELECT 2, 'b' ) SELECT * FROM ( SELECT n , NEWID() as ID FROM Binome ) AS NID CROSS JOIN BinomeLe bug est donc, que la sous requête (dont l'alias est ici NID) qui renvoit 2 lignes de résultat, renvoit des lignes incosistentes, NEWID aura été exécuté 4 fois.1 DA2CCDD1-4CF6-4D80-B6D7-383274DD3BE6 1 a
1 78084481-9540-4601-B815-CA183A167FD2 2 b
2 A9754AA5-A6CE-4E27-8BFF-DADF962DFC61 1 a
2 7719F2BB-127C-43EA-8D9F-2F3FA412849E 2 b
Ce bug a été rapporté à M$ il déjà plusieurs années, et M$ a déclaré grosso-modo "OSEF, trop de répercutions, trop compliqué à changer".
J'ai déjà trouvé une astuce pour contourner le problème mais je n'en suis pas pleinement satisfait.
J'emploie une "agrégation partionnée".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 ; WITH Binome(n, f) AS ( SELECT 1, 'a' UNION ALL SELECT 2, 'b' ) SELECT * FROM ( SELECT n , CAST(MIN(CAST(NEWID() AS VARBINARY)) OVER(PARTITION BY n) AS UNIQUEIDENTIFIER) as ID FROM Binome ) AS NID CROSS JOIN BinomeVoyez-vous d'autres méthodes ? Lesquels ?1 70135257-5868-4F5E-B067-D6D916181B75 1 a
1 70135257-5868-4F5E-B067-D6D916181B75 2 b
2 2AF8E409-B8E2-4AD1-97DA-EE9F149191C8 1 a
2 2AF8E409-B8E2-4AD1-97DA-EE9F149191C8 2 b
Merci.
Partager