Ale*_*lex 15 t-sql sql-server collation
我有以下查询:
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
Run Code Online (Sandbox Code Playgroud)
执行时,我收到以下错误:
无法在等于操作中解决"SQL_Latin1_General_Pref_CP1_CI_AS"和"Latin1_General_CI_AS"之间的排序规则冲突.
NavisionMeta数据库的排序规则是SQL_Latin1_General_Pref_CP1_CI_AS
我该怎么做才能解决这个问题?
tre*_*chf 25
如果a和b是你要比较的两列,而a是与排序规则SQL_Latin1_General_Pref_CP1_AS,而b是与另一个,你可以说
...
WHERE a = b COLLATE SQL_Latin1_General_Pref_CP1_AS
Run Code Online (Sandbox Code Playgroud)
这会将b转换为指定的排序规则,然后将其与a进行比较.
可以按列指定排序规则,因此一个或多个*char-type列将与要比较的列具有不同的排序规则.使用
a = b COLLATE SQL_Latin1_General_Pref_CP1_AS
或
a = b COLLATE Latin1_General_CI_AS
按照treaschf的建议.
为了获得最大效率,请从您认为具有最多行数的表中选择列的排序规则.这意味着较少的值将在比较期间转换其排序规则.
我认为你真的应该让所有列都具有相同的排序规则。我将此工具用于数据库,因为我需要将所有 varchar 列设置为相同的排序规则。 http://www.codeproject.com/KB/database/ChangeCollation.aspx