Impossible de résoudre le conflit de classment entre "SQL_Latin1_General_Pref_CP1_CI_AS" et "Latin1_General_CI_AS" dans l'opération égale à

J'ai la requête suivante:

SELECT DISTINCT(po.SONumber) AS [Sales Order No_], po.PONumber AS PoNo, ph.[Buy-from Vendor No_] AS VendorNo, ph.[Pay-to Name], ph.[Document Date], 'Ship-to Name' = CASE WHEN sh.[Ship-to Name] > '' THEN sh.[Ship-to Name] ELSE sih.[Ship-to Name] END, 'Ship-to Post Code' = CASE WHEN sh.[Ship-to Post Code] > '' THEN sh.[Ship-to Post Code] ELSE sih.[Ship-to Post Code] END, sh.DeliveryPhoneNo AS [Delivery Phone No], 'CustomerPriceGroup' = CASE WHEN sh.[Customer Price Group] > '' THEN sh.[Customer Price Group] ELSE sih.[Customer Price Group] END, 'DeliveryComment' = CASE WHEN sh.[Delivery Comment] > '' THEN sh.[Delivery Comment] ELSE sih.[Delivery Comment] END, 'GiftMessage' = CASE WHEN sh.[GiftMessage] > '' THEN sh.[GiftMessage] ELSE sih.[GiftMessage] END, si.Shipped, si.ShippedDate, si.CourierID FROM NavisionMeta.dbo.PoToSo po, [Crocus Live$Purchase Header] ph, [Crocus Live$Purchase Line] pl, [Crocus Live$Sales Header] sh, [Crocus Live$Sales Invoice Header] sih, NavisionMeta.dbo.SupplierInput si WHERE po.PONumber = ph.[No_] AND ph.[No_] = pl.[Document No_] AND po.SONumber *= sh.No_ AND po.SONumber *= sih.[Order No_] AND po.PONumber *= si.PONo AND ph.[Document Date] BETWEEN '01-01-10' AND '31-01-10' ORDER BY po.PONumber DESC 

Quand il s'exécute, j'obtiens l'erreur suivante:

Impossible de résoudre le conflit de classment entre "SQL_Latin1_General_Pref_CP1_CI_AS" et "Latin1_General_CI_AS" dans l'opération égale à.

Le classment de la database NavisionMeta est SQL_Latin1_General_Pref_CP1_CI_AS

Que puis-je faire pour résoudre ce problème?

Je pense que vous devriez vraiment faire toutes vos colonnes ont la même collation. J'ai utilisé cet outil pour un db où j'avais besoin de mettre toutes les colonnes varchar à la même collation. http://www.codeproject.com/KB/database/ChangeCollation.aspx

Si a et b sont deux colonnes que vous comparez, et a est avec collation SQL_Latin1_General_Pref_CP1_AS, et b est avec un autre, vous pouvez dire

  ... WHERE a = b COLLATE SQL_Latin1_General_Pref_CP1_AS 

Cela transforme b vers le classment spécifié, puis le compare avec a.

Le classment peut être spécifié par colonne, donc une ou plusieurs de vos colonnes de type char auront un classment différent de la colonne que vous comparez. Utilisation
a = b COLLATE SQL_Latin1_General_Pref_CP1_AS
ou
a = b COLLATE Latin1_General_CI_AS
comme suggéré par treaschf.
Pour une efficacité maximale, choisissez le classment de la colonne de la table qui, selon vous, aura le plus grand nombre de lignes. Cela signifie que less de valeurs auront leur classment converti au cours de la comparaison.

Dans tous les cas où vous comparez une valeur varchar à partir de vos données Navision avec vos données non-Navision, vous devez forcer le classment à l'aide de la clause COLLATE .

par exemple, dans votre exemple: –

 ... po.SONumber *= sih.[Order No_] COLLATE SQL_Latin1_General_Pref_CP1_CI_AS AND ...