2016-06-30 2 views
0

Я написал часть SQL, которая соответствует старым номерам ссылок с новыми и перезаписывает их.Номера для массового обновления, возвращающие 0 записей из кода

Контекст заключается в том, что мы получили более 3000 счетов от поставщика с неправильным ссылочным номером. Они предоставили мне нужные файлы в файле Excel.

Я создал новую таблицу в нашей БД и загрузил данные новых ссылок. Затем я запускаю ниже.

Я провел это сначала через среду UAT с тестовыми данными, и код сделал именно то, что я хотел. Но когда я запускаю ниже, я получаю возвращение 0.

Ниже приведен код, я использую

UPDATE a 
SET a.Refr1 = b.RefNEW 
FROM ESB_EDI_HEADERS AS a 
INNER JOIN Musgrave_EDI AS b ON a.Refr1 = b.RefOLD 

Контекст:

ESB_EDI_HEADERS таблица содержит все наши счета. Здесь мы получили неверные ссылочные номера в счетах-фактурах.

Musgrave_EDI - это новая таблица, в которой я импортировал данные из файла Excel.

Я думаю, что может возникнуть проблема с данными, которые я импортировал, как при запуске ниже я не получаю ответов.

SELECT Refr1 
FROM ESB_EDI_Headers 
INTERSECT 
SELECT RefOLD 
FROM Musgrave_EDI 

Здесь я пытаюсь увидеть, где совпадают существующие ссылки, и все же я не получаю результатов здесь.

Оцените любые рекомендации или помощь по этому вопросу, я считаю, что это проблема с данными, хотя не знаю, как я могу поделиться данными на этой платформе.

Ниже приводится несколько примеров данных из таблиц

Musgrave_EDI Выбор TOP 10 * ОТ Musgrave_EDI

RefOLD  RefNEW 
C2300008338 0 
C2300008339 0 
C2300008340 0 
C2300027652 0 
C2300027653 0 
C2300027656 0 
C2300005878 7439 
C2300004652 8172 
C2300004653 8752 
C2300004654 9385 

ESB_EDI_HEADERS Выбор TOP 10 SiteCode, Поставщик, TrDate, Refr1, Refr2 ОТ ESB_EDI_HEaders ГДЕ DateImported> = '2016-05-01 00: 00: 00,000'

Sitecode Supplier TrDate   Refr1  Refr2 
5017 000011 2016-04-28 00:00:00.000 8228378422 E02591436 
5057 000011 2016-04-28 00:00:00.000    E02591454 
5012 000011 2016-04-25 00:00:00.000 78316997 E02591989 
5012 000011 2016-04-27 00:00:00.000 78344448 E02591990 
5012 000011 2016-04-29 00:00:00.000 78367685 E02591991 
5011 000011 2016-04-25 00:00:00.000 78314138 E02591992 
5011 000011 2016-04-28 00:00:00.000 78352647 E02591993 
5011 000011 2016-04-30 00:00:00.000 78376810 E02591994 
5013 000011 2016-04-25 00:00:00.000 78316973 E02592104 
5013 000011 2016-04-27 00:00:00.000 78343940 E02592105 
+0

Вы можете попробовать это. UPDATE ESB_EDI_HEADERS SET Refr1 = b.RefNEW ОТ Musgrave_EDI КАК б ГДЕ \t ESB_EDI_HEADERS.Refr1 = b.RefOLD – NEER

+0

Пробовал это, а также получил 0 записи вернулся – Daniel

+0

вы можете добавить значение для 2-х таблиц? – NEER

ответ

0

ли a.Refr1 и b.RefOLD имеют один и тот же тип данных? Проблема может быть в том, что столбец, с которым вы соединяетесь, не соответствует друг другу.

+0

Изначально возникла проблема с типом данных, при которой RefOLD (и RefNEW) является float и имеет десятичную дробь. Я решил, что и все типы данных теперь nVARCHAR. – Daniel

+0

Что касается вашего примера и поскольку у вас не было никаких результатов после перехвата между двумя таблицами, это означает, что RefOLD не имеет ссылки на Refr1. Вот почему у вас есть 0 результатов. –

+0

Да, это то, о чем я думаю. Я попытался загрузить данные несколькими способами из Excel, csv и т. Д. Не могу понять, в чем проблема, я проверил пробелы и подобные – Daniel

1

Так что все это отсортировано. Оказывается, данные, полученные мной от конечного пользователя, были неправильными, поэтому на самом деле Refr2 должен был быть в соединении.

После этого я начал получать записи обратно. Были некоторые дополнительные проблемы, но это было вызвано из-за пробелов, предоставленных поставщиком.

Так что я решил эту проблему, используя код ниже

BEGIN TRAN 
UPDATE ESB_EDI_HEADERS 
SET Refr2 = b.Refer2 
FROM Musgrave_EDI AS b 
WHERE Refr2 =CONVERT(VARCHAR(30),b.Record)