Получить значение SCOPE_IDENTITY при вставке массовых записей для SQL TableType

У меня следующая структура таблицы, для удобства я отмечаю только отдельные столбцы

  • Table_A (Id, Name, Desc)
  • Table_1 (Id это столбец идентификаторов, Name....)
  • Table_2 (Id это столбец идентификаторов, Table_A_Id, Table_1_Id)

Связь между Table_1 и Table_2 равна 1...*

Теперь я создал тип таблицы для Table_A с именем TType_Table_A (который содержит только Id в качестве столбца, и из моего приложения C # я отправляю несколько записей). Я достиг этой функциональности массовой вставки по желанию.

Что мне нужно, так это то, что когда я вставляю записи в Table_2 из TType_Table_A, скажем, с приведенными ниже утверждениями, я хотел бы захватить Id из Table_2 для каждой вставленной записи.

declare @count int = (select count(*) from @TType_Table_A); --a variable declared for TType_Table_A

if(@count > 0)
  begin
    insert into Table_2(Table_A_Id,Table_1_Id)
    SELECT @SomeValue, @SomeValueAsParameter FROM @TType_Table_A;
  end;

Теперь скажем, если вставлены 2 записи, я хотел бы зафиксировать Id для каждой из этих 2 записей.

Любой вклад/помощь приветствуется

Это то, что я знаю, как этого можно достичь, но я хочу уменьшить количество вызовов БД из моего приложения или пользовательского курсора в хранимой процедуре.

Вставьте запись в Table_1 и верните обратно Id Loop..... через записи и вставьте запись в Table_2 и верните обратно Id

OR

Использовать курсор в хранимой процедуре при вставке/выборе из TableType


person Mr. Imish    schedule 24.06.2013    source источник


Ответы (1)


Я предполагаю, что это сервер Sql? Затем вы можете использовать предложение OUTPUT, например:

declare @NewId table (MyNewId INT) 

 insert into Table_2(Table_A_Id,Table_1_Id)
 output INSERTED.MyNewId INTO @TempTable(MyNewID)
 SELECT SomeValue, SomeValueAsParameter FROM @TType_Table_A;

 SELECT * FROM @NewId
person Steve D    schedule 24.06.2013