если вы пытаетесь вставить в две таблицы и вернуть набор результатов, вы можете сделать все это в ONE INSERT STATEMENT !! , см. Здесь:
CREATE PROCEDURE delete_me
@Name VARCHAR(25),
@Value DECIMAL(13,4),
AS
BEGIN
SET NOCOUNT ON;
--insert row into TheTable
INSERT INTO TheTable
(
Value
)
--insert row into AnotherTable
OUTPUT INSERTED.IdentityColumn, INSERTED.col2...
INTO AnotherTable
--return result set
OUTPUT INSERTED.IdentityColumn
VALUES
(
@value,
)
END
GO
рабочий пример скрипта кода:
DECLARE @TheTable table (RowID int identity ( 1,1) primary key, RowValue1 varchar(5), RowValue2 varchar(5))
DECLARE @AnotherTable table (RowID int, RowValue1 varchar(5), RowValue2 varchar(5))
--insert row into TheTable
INSERT INTO @TheTable
(
RowValue1,RowValue2
)
--insert row into AnotherTable
OUTPUT INSERTED.RowID, INSERTED.RowValue1, INSERTED.RowValue2
INTO @AnotherTable
--return result set
OUTPUT 'From Insert' AS WOW, INSERTED.RowID
VALUES
(
'aaa','bbb'
)
SELECT * FROM @TheTable
SELECT * FROM @AnotherTable
ВЫВОД:
WOW RowID
----------- -----------
From Insert 1
(1 row(s) affected)
RowID RowValue1 RowValue2
----------- --------- ---------
1 aaa bbb
(1 row(s) affected)
RowID RowValue1 RowValue2
----------- --------- ---------
1 aaa bbb
(1 row(s) affected)
РЕДАКТИРОВАТЬ К вашему сведению, это также верно:
DECLARE @MyIdentity int --create a local variable to store the identity
INSERT INTO table1 (... ) values (... ) --generate the identity value
SET @MyIdentity=SCOPE_IDENTITY --capture the identity value
INSERT INTO table2 (... ) values (...@MyIdentity ) --use stored identity value
SELECT @MyIdentity --return a result set of the stored identity value