簡體   English   中英

如何解決歸類沖突

[英]How can I resolve a collation conflict

我正在嘗試將數據從一個數據庫移動到另一個數據庫。 在舊數據庫中,有一列數據類型為DateTime,該列需要映射到新數據庫中類型為Date的新列。

為了實現這一目標,我編寫了以下SQL查詢

    UPDATE NewFishTrackerProfessional.dbo.LandingHeaders
  SET NewFishTrackerProfessional.dbo.LandingHeaders.LandingDate1 = (SELECT CONVERT(DATE,FishTracker.dbo.Landings.LandingDate) FROM FishTracker.dbo.Landings WHERE LandingHeaders.TicketNumber = FishTracker.dbo.Landings.TicketNo)

但是,在執行時會產生以下錯誤。

1等於操作無法解決“ SQL_Latin1_General_CP1_CI_AS”和“ Latin1_General_CI_AS”之間的排序規則沖突。 SQL1.sql 2 1

任何人都可以提出一種可能解決此問題的方法嗎?

謝謝

原始數據庫寫在sqlserver 2005中,新數據庫創建在sqlserver 2012中。我再也無法輕松訪問sqlserver 2005實例。

問題可能不在date (並且如果我們假設您確實在使用本機類型,則肯定是這樣)。 剩下where子句。 因此,使用COLLATE運算符:

UPDATE NewFishTrackerProfessional.dbo.LandingHeaders lh
    SET lh.LandingDate1 = (SELECT CONVERT(DATE, l.LandingDate)
                           FROM FishTracker.dbo.Landings l
                           WHERE lh.TicketNumber COLLATE Latin1_General_CI_AS  = ls.TicketNo COLLATE Latin1_General_CI_AS
                          );

我不知道哪個排序規則中包含哪個值,因此我只是將運算符放在了兩側。 您可能應該只將運算符放在lh一邊,查詢可以使用Landings.TicketNo上的索引。

編輯:

這表明您有多個與WHERE匹配的值。 最簡單的方法是使用TOP或聚合函數選擇一個:

UPDATE NewFishTrackerProfessional.dbo.LandingHeaders lh
    SET lh.LandingDate1 = (SELECT TOP 1 CONVERT(DATE, l.LandingDate)
                           FROM FishTracker.dbo.Landings l
                           WHERE lh.TicketNumber COLLATE Latin1_General_CI_AS  = ls.TicketNo COLLATE Latin1_General_CI_AS
                          );

要么

UPDATE NewFishTrackerProfessional.dbo.LandingHeaders lh
    SET lh.LandingDate1 = (SELECT MAX(CONVERT(DATE, l.LandingDate))
                           FROM FishTracker.dbo.Landings l
                           WHERE lh.TicketNumber COLLATE Latin1_General_CI_AS  = ls.TicketNo COLLATE Latin1_General_CI_AS
                          );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM