Case Sensitive join TSQL

Je suis un peu arrêté ici. J'ai une simple jointure externe gauche à une table qui returnne un ID.

Mon code est comme

Select distinct TenantID ,Name ,Name2 ,TenantNumber ,Cashname From Tenants LEFT OUTER JOIN tCash on TenantNumber = CashNumber and tMoney.CashName = Tenants.Name2 

Mon jeu de résultats est le suivant:

 **TenantID | Name | Name2 | TenantNo | CashName** 100 |MyShop | John's shop | 12345 |John's shop 999 |MyShop | John's Shop | 12345 |John's shop 

Mon problème: à toutes fins utiles, "John's shop" est différent de "John's Shop" – Je suis en train de join ma table sur le TenantNo, puis sur Name2, mais le nom 2 est différent par Case.

Question : existe-t-il un moyen de différencier une jointure en fonction de la casse? Je ne voudrais pas utiliser UPPER ou LOWER raison du fait que cela ruinerait le cas sur les rapports.

Merci!

En ajoutant des informations sur la table ci-dessous, veuillez supposer que toutes les colonnes sont coupées d'espaces.

tMoney

 CashNumnbr | CashName 102504 Bill's Place 102374 Tom's Shop 12345 John's Shop 12345 John's shop 

Locataires

  TenantID | Name | Name2 |TenantNumber 1 |MyShop | John's Shop | 12345 2 |MyShop | John's shop | 12345 3 |Shoppee | Bill's Place | 102504 4 | Shop2 | Toms Shop | 102374 

Puisque je veux joindre pour get le TenantID correct pour un rapport d'AR, je voudrais m'assurer que j'amène toujours le locataire correct. Si le cas est différent, y a-t-il quelque chose que je puisse écrire pour différencier une situation comme celle de John?

Le problème est que dans la deuxième rangée de vos résultats "John's S hop" n'aurait pas dû correspondre à "John's s hop"?

Vous pouvez utiliser un classment sensible à la casse.

Cela est probablement mieux réalisé en modifiant le classment des colonnes impliquées pour permettre l'utilisation de l'index, mais vous pouvez également le faire au moment de l'exécution avec une clause COLLATE explicite comme ci-dessous.

 SELECT DISTINCT TenantID, Name, Name2, TenantNumber, Cashname FROM Tenants LEFT OUTER JOIN tCash ON TenantNumber = CashNumber AND tMoney.CashName = Tenants.Name2 COLLATE Latin1_General_100_CS_AS 

Les commentaires sur la participation sur id au lieu du nom sont probablement correctes et annuleraient la nécessité de le faire du tout.