Как обновить наборы повторяющихся значений на основе содержащего символа
У меня есть программа для обновления наборов различных значений дубликатов для данного результирующего набора. Значения в наборе будут обновляться на основе
1.самое высокое доступное значение int в смешанном столбце int/varchar для связанной таблицы.
2.того, содержат ли они с символом C с индексом 10
Когда я запускаю функцию , которая обновляет значения, они не обновляются.
Если мой результирующий набор возвращает 2 набора дубликатов следующим образом:
ALID-HEA-CO-001
ALID-HEA-CO-001
ALID-HEA-CO-001
ЭМИЛЬ-MTR-CO-012
ЭМИЛЬ-MTR-CO-012
и в связанной таблице мой запрос SP возвращает самый высокий доступный int как 23 (от AG00023), тогда я хочу обновить каждый отдельный набор дубликатов выше как :
AG00024
AG00024
AG00024
AG00025
AG00025
В качестве теста я могу получить наборы дубликатов с помощью следующего консольного приложения :
static void Main(string[] args) { List<Broker> BrokerList = GetData(); foreach(Broker b in BrokerList) { Console.WriteLine(b.Code); } } public static List<Broker> GetData() { List<Broker> details = new List<Broker>(); using (SqlConnection conn = new SqlConnection(Helpers.DatabaseConnect)) { conn.Open(); DataTable dt = new DataTable(); SqlCommand cmd = new SqlCommand("getCOAgents", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.ExecuteNonQuery(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(dt); foreach (DataRow dr in dt.Rows) { Broker broker = new Broker(); broker.Code = Convert.ToString(dr["agent_shortname"]); details.Add(broker); } conn.Close(); } return details; }
То, на чем я застрял, затем зацикливается на результирующем наборе, так что всякий раз , когда поток программы сталкивается с определенным набором дубликатов, он обновляет этот набор, как показано выше, затем следующий отдельный набор, затем следующий, пока весь результирующий набор не будет обновлен.
Что я уже пробовал:
Функция обновления наборов, и я могу получить самый высокий доступный int с помощью SP spGetHighestAGCode Любая помощь в том, как я могу сделать цикл while, не проверяет правильность изменения наборов дубликатов или что-то неправильно в структуре алгоритма ActionResult:
public ActionResult NewAGAgentMapping() { Models.FileUpload.Mapping mapping = new Models.FileUpload.Mapping(); try { List<Broker> gnbc = GetData(); using (SqlConnection conn = new SqlConnection(Helpers.DatabaseConnect)) { Models.FileUpload.Mapping mappinggg = new Models.FileUpload.Mapping(); SqlCommand cmd = new SqlCommand("spGetHighestAGCode", conn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter param = new SqlParameter("@returnValue", SqlDbType.Int); cmd.Parameters.Add("@returnValue", SqlDbType.Int).Direction = ParameterDirection.Output; cmd.ExecuteNonQuery(); int Counter = Convert.ToInt32(cmd.Parameters["@returnValue"].Value); int newCode = Counter + 1; conn.Close(); mappinggg.Counter = "AG" + newCode.ToString("000000"); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); conn.Close(); //Update the Duplicates var duplicateBrokers = gnbc.FindDuplicates(p => p.Code); int n = duplicateBrokers.Count; for (int i = 0; i < n; i++) { //bool isDuplicate = false; for (int j = 0; j < i; j++) { while (duplicateBrokers[i] == duplicateBrokers[j]) { foreach (var dupBroker in duplicateBrokers) { using (SqlConnection conn1 = new SqlConnection(Helpers.DatabaseConnect)) { Models.FileUpload.Mapping mappingg = new Models.FileUpload.Mapping(); string query = "UPDATE BrokerTest SET agent_shortname ='" + Convert.ToString(mappinggg.Counter) + "' WHERE agent_shortname='" + dupBroker + "'"; SqlCommand command = new SqlCommand(query, conn1); conn1.Open(); command.ExecuteNonQuery(); conn1.Close(); } } } } } } } catch (Exception ex) { ViewBag.ErrorMessage = Helpers.Messages.GENERAL_ERROR; return View("AccountAnalysisResponse"); } return RedirectToAction("AccountAnalysisResponse"); }
Aarti Meswania
пожалуйста, поставьте свой код для sps, который вы создали, и, похоже, вы можете решить проблемы, используя только sp. пожалуйста, дайте sp подробную информацию, а также примерные данные и необходимые выходные данные, которые облегчат понимание, и вы сможете быстрее получить решение.
.net-код здесь не требуется, так как он будет использоваться только для запуска sp.