Вот пример использования предложения output
, как предложил Oded.Сначала немного кода установки:
if exists (select * from tempdb.sys.tables where name like '#tmp%')
drop table #tmp
create table #tmp (id int identity, FirstName varchar(50), LastName varchar(50))
if exists (select * from sys.procedures where name = 'TestProcedure')
drop procedure TestProcedure
if exists (select * from sys.types where name = 'TestTableType')
drop type TestTableType
create type TestTableType as table (FirstName varchar(50), LastName varchar(50))
go
Теперь мы можем создать хранимую процедуру:
create procedure dbo.TestProcedure
@List TestTableType readonly
as
insert #tmp
(FirstName, LastName)
output inserted.*
select FirstName
, LastName
from @List l
go
Обратите внимание на предложение output
, которое сообщает SQL Server, что нужно возвращать вставленные строкиклиент, в том числе значение идентификатора столбца.Теперь, когда весь код настроен, мы можем проверить его:
declare @List TestTableType
insert @List values ('Rick','Cain'),
('Herman', 'Gingrich'),
('Newt', 'Paul'),
('Ron', 'Perry')
exec dbo.TestProcedure @List
select * from #tmp
Вы увидите, что значения, возвращаемые процедурой, точно соответствуют значениям в #tmp
.