А как Вы чистите справочники?

После импорта данных о контрагентах из Excel часто в справочниках получается достаточно много мусора. Вот на днях столкнулась с тем, что появилось больше 10 разных "Самарских областей" различных вариантов написания. С опечатками, с сокращениями, с точками и даже с запятыми. Ну и города, конечно, тоже поражали разнообразием. Кроме Самары, Саамры, Cfvfhs и г. Самары (и еще около 10 различных вариантов написания) был даже город "их сисадмин - Владислав". Но, сисадмин здесь ни при чем, его я убрала вручную :) А вот сливать кучу Самар предпочла скриптом. Ведь к каждому из городов был привязан контрагент, адрес контрагента и контакт.

Я сделала так:

UPDATE tbl_Account SET CityID = '{3F239901-370A-49E1-8E55-AF816D36373F}' WHERE CityID IN (SELECT ID FROM tbl_City WHERE Name LIKE '%Самар%')

Для таблиц tbl_Account, tbl_AccountAddress, tbl_Contact и tbl_ContactAddress. При этом CityID - ID "правильного" города, а текст в like я меняла для разных случаев.

Также почистила и StateID в этих таблицах.

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

Может быть, конечно, есть способ попроще, но я пошла путем наименьшего сопротивления :)

Нравится

Поделиться

4 комментария

использую чуть-чуть расширенный запрос
[sql]
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)
[/sql]

Кроме запроса наверное вариантов нет...
Вообще такое встречается постоянно, и проверка на совпадения или стандартизация справочников адресных просится

"просто Алексей" написал:использую чуть-чуть расширенный запрос

Класс! :) Не догадалась, ручками инфу подставляла )) Что ж Вы раньше-то молчали? Я ж тут полкоммьюнити перерыла, пока не сдалась и не пошла своим путем )))

думал давно известный прием
но коль так, предложу на суд общественности еще один свой запрос, который выставляет страны и регионы, если в карточке указан только город, а в справочнике городов есть информация о стране и регионе (регион можно и убрать из запроса)
[sql]
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
[/sql]
надеюсь кому-то окажется полезным

Показать все комментарии