私は次のクエリを持っています:
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
実行すると、次のエラーが発生します。
等しい操作で「SQL_Latin1_General_Pref_CP1_CI_AS」と「Latin1_General_CI_AS」の間の照合の競合を解決できません。
NavisionMetaデータベースの照合順序はSQL_Latin1_General_Pref_CP1_CI_ASです。
これを修正するにはどうすればよいですか?
私はあなたが本当にあなたがすべての列が同じ照合順序を持つようにするべきだと思います。すべてのvarchar列を同じ照合順序に設定する必要がある場合は、このツールをデータベースに使用しました。 http://www.codeproject.com/KB/database/ChangeCollation.aspx
Aとbが比較している2つの列であり、aが照合SQL_Latin1_General_Pref_CP1_ASであり、bが他の列である場合、次のように言うことができます。
...
WHERE a = b COLLATE SQL_Latin1_General_Pref_CP1_AS
これにより、bが指定された照合に変換され、aと比較されます。
照合順序は列ごとに指定できるため、1つ以上の* char型列は、比較対象の列とは異なる照合順序になります。使用するa = b COLLATE SQL_Latin1_General_Pref_CP1_AS
またはa = b COLLATE Latin1_General_CI_AS
treaschfによって提案されたとおり。
効率を最大化するには、行数が最も多いと思われるテーブルから列の照合順序を選択します。これは、比較中に変換される値が少なくなることを意味します。
Navisionデータのvarchar値をNavision以外のデータと比較する場合は常に、COLLATE
句を使用して照合を強制する必要があります。
たとえば、あなたの例では:-
...
po.SONumber *= sih.[Order No_] COLLATE SQL_Latin1_General_Pref_CP1_CI_AS AND
...