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:

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
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.

Si je lance ma requête:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Select [NO], [NOM], [PRENOM], [CODEBARRE], [TYPEPART] FROM NOMSERVERLINK.NOMBD.dbo.NOMTABLE
Le résultat est correct. Pas de doublon.
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:
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)
Mes enregistrements sont systématiquement en double et la clause DISTINCT ne change rien.
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.