@Deka007

Как передать значение последнего добавленного id в другую таблицу?

Как передать значения последнего добавленного A_ID из [таблицы А] в [Таблицу В] при том что [Таблица В] имеет FK_A_id (внешний ключ).
К примеру:
У меня есть две таблицы Person и Аpplication где p_id (PK Person) а app_p_id (FK p_id Person)
5b111bf0828ab910063616.png5b111bf9ecfcd043588134.png5b111c0321256067079511.png

Нужен запрос на sql или хранимая процедура которую смогу обработать на C#. Суть в том чтобы при заполнении Person, я смог сохранить Id значение последней добавленной записи и передать в Application.
P.S. гугл про scope_identity() но хз как её применять
  • Вопрос задан
  • 426 просмотров
Решения вопроса 2
AndyKorg
@AndyKorg
Кнопконажиматель и припоерасплавлятель
Комментировать
Jeer
@Jeer
уверенный пользователь
Если ты работаешь через Entity Framework, то вначале добавляешь первую сущность в базу, жмешь сохранить изменения и у тебя в этой сущности изменяется айдишник на созданный в базе, который далее используешь. Это самый топорный вариант. Так же работает, если ты добавляешь вторую сущность в связь с первой, должно корректно создаться.

Если тебя интересует именно sql код, который ты вызываешь из ADO (когда отправляешь команду типа string из кода c#), либо пишешь хранимую процедуру в sql с кодом и вызываешь хранимку так же через ADO.net, то тебе нужно что-то типа такого:

string queryString =
                        String.Format(@"
                        insert into UserProfile (vk_id, DialogQuestId, UserName,Race, access_token) values ({0}, 1 ,N'{1}',{2}, '{3}') 
                        SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]"
                        , vk_id, name, race, access_token);

            var dt = await GetDataAsync(queryString);
            if (dt == null || dt.Rows.Count == 0) return 0;
            int id = int.Parse(dt.Rows[0]["SCOPE_IDENTITY"].ToString());
            await SetDataAsync($"insert into UserMoney (UserId, Cr) values ({id},50)");


GetDataAsync и SetDataAsync - работа через ADO.net, вынесенная в отдельные функции
var result = new DataTable();
using (var connection = new SqlConnection(myConnString))
                using (var command = new SqlCommand(query, connection))
                {
                    await command.Connection.OpenAsync().ConfigureAwait(false);
                    var da = new SqlDataAdapter(command);
                    da.Fill(result);
                }
return result;


Код немного корявый, но, думаю, выдернешь что тебе нужно
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
У параметров stored_procedure есть модификатор out

То бишь по выполнению процедуры можно его прочесть на c# стороне

Но кмк стоит в виде "единого действия" в одной процедуре делать все логически связанные операции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы