После импорта данных о контрагентах из Excel часто в справочниках получается достаточно много мусора. Вот на днях столкнулась с тем, что появилось больше 10 разных "Самарских областей" различных вариантов написания. С опечатками, с сокращениями, с точками и даже с запятыми. Ну и города, конечно, тоже поражали разнообразием. Кроме Самары, Саамры, Cfvfhs и г. Самары (и еще около 10 различных вариантов написания) был даже город "их сисадмин - Владислав". Но, сисадмин здесь ни при чем, его я убрала вручную :) А вот сливать кучу Самар предпочла скриптом. Ведь к каждому из городов был привязан контрагент, адрес контрагента и контакт.
Я сделала так:
Для таблиц tbl_Account, tbl_AccountAddress, tbl_Contact и tbl_ContactAddress. При этом CityID - ID "правильного" города, а текст в like я меняла для разных случаев.
Также почистила и StateID в этих таблицах.
Таким образом за полчаса удалось вычистить то, что внушало ужас при первом взгляде.
Может быть, конечно, есть способ попроще, но я пошла путем наименьшего сопротивления :)
использую чуть-чуть расширенный запрос
declare @citynew uniqueidentifier = '' declare @cityold varchar(30) = '' UPDATE [Terrasoft].[dbo].[tbl_Account] SET [CityID] = @citynew WHERE [CityID] in ( SELECT [ID] FROM [Terrasoft].[dbo].[tbl_City] where [name] like @cityold) UPDATE [Terrasoft].[dbo].[tbl_AccountAddress] SET [CityID] = @citynew WHERE [CityID] in ( SELECT [ID] FROM [Terrasoft].[dbo].[tbl_City] where [name] like @cityold) UPDATE [Terrasoft].[dbo].[tbl_Contact] SET [CityID] = @citynew WHERE [CityID] in ( SELECT [ID] FROM [Terrasoft].[dbo].[tbl_City] where [name] like @cityold) UPDATE [Terrasoft].[dbo].[tbl_ContactAddress] SET [CityID] = @citynew WHERE [CityID] in ( SELECT [ID] FROM [Terrasoft].[dbo].[tbl_City] where [name] like @cityold)
Кроме запроса наверное вариантов нет...
Вообще такое встречается постоянно, и проверка на совпадения или стандартизация справочников адресных просится
"просто Алексей" написал:использую чуть-чуть расширенный запрос
Класс! :) Не догадалась, ручками инфу подставляла )) Что ж Вы раньше-то молчали? Я ж тут полкоммьюнити перерыла, пока не сдалась и не пошла своим путем )))
думал давно известный прием
но коль так, предложу на суд общественности еще один свой запрос, который выставляет страны и регионы, если в карточке указан только город, а в справочнике городов есть информация о стране и регионе (регион можно и убрать из запроса)
UPDATE [Terrasoft].[dbo].[tbl_Account] SET [Terrasoft].[dbo].[tbl_Account].[StateID] = ( SELECT [StateID] FROM [Terrasoft].[dbo].[tbl_City] where (not [Terrasoft].[dbo].[tbl_City].[StateID] is null) and (not [Terrasoft].[dbo].[tbl_City].[CountryID] is null) and ([Terrasoft].[dbo].[tbl_City].[ID] = [Terrasoft].[dbo].[tbl_Account].[CityID]) ) ,[Terrasoft].[dbo].[tbl_Account].[CountryID] = ( SELECT [CountryID] FROM [Terrasoft].[dbo].[tbl_City] where (not [Terrasoft].[dbo].[tbl_City].[StateID] is null) and (not [Terrasoft].[dbo].[tbl_City].[CountryID] is null) and ([Terrasoft].[dbo].[tbl_City].[ID] = [Terrasoft].[dbo].[tbl_Account].[CityID]) ) WHERE [Terrasoft].[dbo].[tbl_Account].[CityID] in ( SELECT [ID] FROM [Terrasoft].[dbo].[tbl_City] where (not [Terrasoft].[dbo].[tbl_City].[StateID] is null) and (not [Terrasoft].[dbo].[tbl_City].[CountryID] is null) ) GO
надеюсь кому-то окажется полезным