Tshumore Ответов: 1

Как обновить экземпляры повторяющихся значений в C#


Я ищу функцию, которая для каждого найденного экземпляра дубликатов обновляет все значения в экземпляре(до нового кода).
Экземпляр будет обновляться в зависимости от того, содержит ли он определенную подстроку. Дубликаты, содержащие подстроку-CO -, будут обновлены следующим образом:
Если последний используемый код обновления в предыдущем пакете был AG00021, то первый экземпляр дубликатов, найденный в текущем пакете, будет обновлен следующим образом :
ALID-HEA-CO-001 -- AG00022 
ALID-HEA-CO-001 -- AG00022

Этот экземпляр дубликатов содержит две строки.

Предположим, что это еще один экземпляр дубликатов EMIL-MTR-CO-012, найденный с 3 строками, тогда все три строки будут обновлены как :
EMIL-MTR-CO-012 -- AG00023 
EMIL-MTR-CO-012 -- AG00023 
EMIL-MTR-CO-012 -- AG00023


Дубликаты, содержащие подстроку-BR -, будут обновлены таким же образом, но с использованием кода обновления BR*****.. например, в текущем пакете, если у нас есть экземпляр дубликатов CARE-HEA-BR-006 с 2 строками и последний код обновления был BR00079, то результат будет следующим :
CARE-HEA-BR-006 --BR00080 
CARE-HEA-BR-006 --BR00080
.

Любые предложения о том, как я могу перебирать каждое значение в дублирующемся экземпляре и обновлять его соответствующим образом.
Я бы хотел достичь этого с помощью параметризованных SQL - запросов, а не LINQ.
У меня уже есть логика, чтобы получить последний код обновления, и я могу успешно получить его в своем коде.

Что я уже пробовал:

На данный момент я могу получить только общее количество в каждом дублирующемся экземпляре с помощью T-SQL в SSMS, но затем мне нужно перебрать каждое значение для каждого найденного дубликата экземпляра и обновить его. Мой T-SQL запрос:
SELECT agent_shortname, COUNT(agent_shortname) AS CountOf
    FROM            BrokerTest
    WHERE        term = 'NB'
    GROUP BY agent_shortname

CHill60

Вам абсолютно не нужно ничего перебирать. SQL-это базовый набор так просто выбрать подходящее предложение where

W∴ Balboos, GHB

Просто мысль, основанная на том, как вы хотите обновить несколько дубликатов экземпляров:

Вы создадите новый набор (меньший на 1) дубликатов. Как ты собираешься с этим справиться, если вообще собираешься? По крайней мере, вам нужно будет выполнить свою процедуру несколько раз, чтобы пройти через это. Кроме того, вы можете сериализовать дубликаты.

1 Ответов

Рейтинг:
1

Sagan Internet Marketing

Это непроверено, но что-то вроде этого должно сработать

DECLARE @counter int;
SET @counter = 0;

SELECT ([agent_shortname] +
  (SELECT CASE
     WHEN CHARINDEX('CR', [agent_shortname]) > -1 THEN 'AG'
     WHEN CHARINDEX('BR', [agent_shortname]) > -1 THEN 'BR'
     ELSE 'UNKNOWN'
   END) +
  (SELECT LPAD((SELECT @counter=@counter + 1), 5, '0'))) AS [CountOf]
FROM [BrokerTest] WHERE [agent_shortname] IN
  (SELECT [agent_shortname]
     FROM [BrokerTest]
       GROUP BY [agent_shortname]
       HAVING COUNT(*) > 1)