15

次のクエリがあります。

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

実行すると、次のエラーが表示されます。

equal to 操作で、"SQL_Latin1_General_Pref_CP1_CI_AS" と "Latin1_General_CI_AS" の間の照合の競合を解決できません。

NavisionMeta データベースの照合順序は SQL_Latin1_General_Pref_CP1_CI_AS です。

これを修正するにはどうすればよいですか??

4

4 に答える 4

25

a と b が比較対象の 2 つの列であり、a が照合 SQL_Latin1_General_Pref_CP1_AS を使用し、b がその他の列を使用している場合、次のように言えます。

 ... 
 WHERE a = b COLLATE SQL_Latin1_General_Pref_CP1_AS

これにより、b が指定された照合順序に変換され、それが a と比較されます。

于 2010-01-12T10:38:00.830 に答える
7

照合は列ごとに指定できるため、1 つ以上の *char-type 列は、比較対象の列とは異なる照合になります。 treaschf の提案に従って
a = b COLLATE SQL_Latin1_General_Pref_CP1_AS
orを使用します。 効率を最大化するには、行数が最も多いと思われるテーブルから列の照合を選択します。これは、比較中に照合が変換される値が少なくなることを意味します。
a = b COLLATE Latin1_General_CI_AS

于 2010-01-12T10:49:37.513 に答える
4

Navision データの varchar 値を Navision 以外のデータと比較する場合は常に、COLLATE句を使用して照合を強制する必要があります。

たとえば、あなたの例では:-

...
po.SONumber *= sih.[Order No_] COLLATE SQL_Latin1_General_Pref_CP1_CI_AS AND 
...
于 2010-01-12T10:50:11.867 に答える
3

すべての列に同じ照合順序を設定する必要があると思います。すべての varchar 列を同じ照合順序に設定する必要があったため、このツールをデータベースに使用しました。 http://www.codeproject.com/KB/database/ChangeCollat​​ion.aspx

于 2010-01-12T17:18:37.483 に答える