Как вставить записи в несколько взаимозависимых таблиц в одной транзакции SQL? - PullRequest
0 голосов
/ 08 мая 2020

У меня есть сценарий, в котором мне нужно выполнить INSERT Operation на нескольких SQL таблицах. Существует зависимость для вставки записей в каждую таблицу.

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

Все операции INSERT должны быть частью одной SQL Transaction, чтобы не было записи о потерянных записях в таблицах базы данных.

Я собираюсь поместить все INSERT логики операций c в один Stored Procedure, но мне не хватает понимания того же для обработки списка записей ( в случае контактов и компаний ) от C# до SQL.

Ниже приведены критерии зависимости Insert Table -

Основные table => Deal ()

  • INSERT Deal (получить INSERTED dealid, чтобы ВСТАВИТЬ его в связанную таблицу контактов и компаний)
  • INSERT список контактов в таблице контактов (получить INSERTED контактид с я NSERT его в связанной таблице контактов)
  • ВСТАВИТЬ список связанных контактов в таблице DealContact (dealid, contactid)

  • ВСТАВИТЬ список компаний в таблицу Company (получить ВСТАВИТЬ идентификатор компании, чтобы ВСТАВИТЬ его в таблицу связанных компаний)

  • ВСТАВИТЬ список связанных компаний в таблицу DealCompany (dealid, companyid)

Вопрос: Как выполнить следующие операции SQL в одной транзакции SQL, чтобы убедиться, что в соответствующих таблицах нет записей потерянных записей?

  • INSERT Список контактов, а затем Список связанных контактов для каждой сделки
  • ВСТАВИТЬ Список компаний, а затем Список ассоциированных компаний для каждой сделки

Ниже приведен метод C#, в котором я пытаюсь ввести эти операции Вставки -

public void ProcessDeals(List<Result> lstDeals)
{
    if (_objReq == null)
        _objReq = new RequestHandler();
    string strBU = string.Empty;
    foreach (Result deal in lstDeals)
    {
        #region Associated Contacts
        Task<AssociatedContacts> taskAscContacts = _objReq.Get<AssociatedContacts>(_limit, deal.id);
        //store response in a list of associated contacts
        List<AscContact> ascContacts = taskAscContacts.Result.results;      

        //pull cotact information from API using contact id
        List<Contact> lstContacts = new List<Contact>();
        foreach (AscContact contact in ascContacts)
        {
            Task<Contact> taskContact = _objReq.Get<Contact>(100, contact.id);
            Contact contactinfo = taskContact.Result;

            //store contact in list of contacts
            lstContacts.Add(contactinfo);   
        }
        #endregion

        #region Associated Companies
        Task<AssociatedCompanies> taskAscCompanies = _objReq.Get<AssociatedCompanies>(_limit, deal.id);
        //store response in a list of associated companies
        List<AscCompany> ascCompanies = taskAscCompanies.Result.results;

        //pull cotact information
        List<Company> lstCompanies = new List<Company>();
        foreach (AscCompany company in ascCompanies)
        {
            Task<Company> taskCompany = _objReq.Get<Company>(100, company.id);

            //store contact in list of contacts
            lstCompanies.Add(taskCompany.Result);
        }
        #endregion

        //TODO: finally db insert operations

        //Step 1 - Insert into deal
        //Step 2 - Insert into contacts
        //Step 3 - Insert into companies

        //Step 4 - Insert into Ass Contact 

        //Step 5 -- Insert into Ass company
    }
}

Приветствую любые предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...