[英]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.