2015-06-06 97 views
0

我正在尝试将数据从一个数据库移动到另一个数据库。在旧数据库中有一列数据类型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

任何人都可以提出一种解决方法吗?

感谢

原始数据库于2005年SQLSERVER写回,新的数据库在SQLSERVER 2012年创建,我不再有轻松访问SQLSERVER的2005实例。

回答

1

这个问题可能不在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 
         ); 
+0

喜登我修改你的建议小幅以下; UPDATE NewFishTrackerProfessional.dbo.LandingHeaders SET LandingDate1 =(SELECT CONVERT(DATE,l.LandingDate) FROM FishTracker.dbo.Landings升 WHERE TicketNumber COLLATE Latin1_General_CI_AS = l.TicketNo COLLATE Latin1_General_CI_AS ); –

+0

其中产生以下错误; 1子查询返回了多个值。当子查询遵循=,!=,<, <= , >,> =或当子查询用作表达式时,这是不允许的。 SQL2.sql 1 1我怀疑这可能是因为表中有106,00行,我需要更新每一个。我应该试图在某种循环中包装你的建议吗? –

+0

梦幻般的戈登,非常感谢。 –