Bonjour à tous,
Context:
- Deux bases de données chacune sur un serveur diffèrent
- Un serveur linké pour simplifier la tâche
- Une table vide sur un serveur (SQL Server 2012 SP2)(collation server:Latin1_General_CI_AS: collation BD:SQL_Latin1_General_CP1_CI_AI)
- Une table avec les informations (SQL Server 2008)(collation:SQL_Latin1_General_CP1_CI_AI)
Déroulement:
Je lance ma requête:
Premier point, si je ne mets pas la clause DISTINCT, je reçois dans la table vide les enregistrements en double, alors que la requête me donne le bon nombre d'enregistrements.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 INSERT INTO [IDWorks].[dbo].[UsersData] ([NO], [NOM], [PRENOM], [CODEBARRE], [TYPEPART]) Select DISTINCT [NO], [NOM], [PRENOM], [CODEBARRE], [TYPEPART] FROM NOMSERVERLINK.NOMBD.dbo.NOMTABLE
Si je lance ma requête:
Le résultat est correct. Pas de doublon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Select [NO], [NOM], [PRENOM], [CODEBARRE], [TYPEPART] FROM NOMSERVERLINK.NOMBD.dbo.NOMTABLE
Si je rajoute une clause WHERE, idem
Si je vide la table initialement vide avec un DELETE, et que je relance un nouvel Insert, mais avec une clause WHERE:
Mes enregistrements sont systématiquement en double et la clause DISTINCT ne change rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 INSERT INTO [IDWorks].[dbo].[UsersData] ([NO], [NOM], [PRENOM], [CODEBARRE], [TYPEPART]) Select DISTINCT [NO], [NOM], [PRENOM], [CODEBARRE], [TYPEPART] FROM NOMSERVERLINK.NOMBD.dbo.NOMTABLE WHERE ([TYPEPART] = 11 OR [TYPEPART] = 99)
Si je lance la requête seule, le résultat est correct.
Je ne fais pas du SQL tous les jours et encore moins du SQL Server, mais je suis perdu par ce comportement. C'est pourtant basique...
Je me demande la collation ne serait pas le problème, mais je n'ai pas suffisamment d'expérience pour le dire.
Merci pour votre aide.
Partager