2015-06-06 5 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

Может ли кто-нибудь предложить способ, которым можно было бы разрешить это?

Благодаря

исходная база данных была написана еще в SQLServer 2005, новая база данных была создана в 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.

EDIT:

Это говорит о том, что у вас есть несколько значений, которые соответствуют 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 (дата, l.LandingDate) ОТ FishTracker.dbo.Landings л ГДЕ TicketNumber СОЪЪАТЕ Latin1_General_CI_AS = l.TicketNo COLLATE Latin1_General_CI_AS ); –

+0

, который произвел следующую ошибку; 1 Подзапрос возвращает более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, <= , >,> = или когда подзапрос используется как выражение. SQL2.sql 1 1 Я подозреваю, что это может быть связано с тем, что в таблице содержится около 106,00 строк, и мне нужно обновить их. Должен ли я пытаться обернуть ваше предложение в какой-то цикл? –

+0

Фантастический Гордон, большое вам спасибо. –

Смежные вопросы