У меня нет проблем с запуском этого:
CREATE DATABASE ADMINROTAS
GO
CREATE TABLE ADMINROTAS.dbo.MessageOwner
(
MessageOwnerID INT IDENTITY PRIMARY KEY,
ownertype INT,
ownertenant INT
)
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[INSERT_MessageOwner]
@ownertype AS INT,
@ownertenant AS INT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO ADMINROTAS.dbo.MessageOwner
OUTPUT Inserted.MessageOwnerID
VALUES (@ownertype, @ownertenant);
END
GO
DECLARE @messageOwnerType INT;
SET @messageOwnerType = 3;
EXECUTE [ADMINROTAS].[dbo].INSERT_MessageOwner @messageOwnerType
GO
DECLARE @messageOwnerType INT;
DECLARE @messageOwnerDB INT;
SET @messageOwnerType = 3;
SET @messageOwnerDB = DB_ID();
EXECUTE [ADMINROTAS].[dbo].INSERT_MessageOwner @messageOwnerType, @messageOwnerDB
Может быть, вы что-то упустили при написании вопроса.
Я полагаю, что MessageOwnerID является столбцом идентификации вашей таблицы. Чтобы получить это значение, сначала нужно объявить переменную таблицы, например @Temp, со структурой столбца, который вы хотите вывести из вставки:
DECLARE @Temp TABLE
(
MessageOwnerID INT
)
Во-вторых, вам нужно изменить оператор OUTPUT, чтобы вставить этот результат в переменную:
OUTPUT Inserted.MessageOwnerID INTO @Temp
Теперь у вас есть эти результаты в вашей таблице. Вы можете написать оператор выбора в конце вашей процедуры, или, поскольку вы уверены, что вставляете только одну запись, вы можете объявить переменную, скажем, @MessageOwnerID. Чтобы вернуть это значение вызывающей стороне, вы должны объявить его как параметр OUTPUT. Установите его значение равным значению из временной таблицы и прочитайте его при выполнении. Ваша процедура изменяется следующим образом:
ALTER PROCEDURE [dbo].[INSERT_MessageOwner]
@ownertype AS INT,
@ownertenant AS INT,
@MessageOwnerID INT = NULL OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Temp TABLE
(
MessageOwnerID INT
)
INSERT INTO ADMINROTAS.dbo.MessageOwner
OUTPUT Inserted.MessageOwnerID INTO @Temp
VALUES (@ownertype, @ownertenant);
SELECT @MessageOwnerID = MessageOwnerID FROM @Temp
END
Помните ключевое слово OUTPUT в объявлении параметра!
Вызов процедуры меняется следующим образом:
DECLARE @messageOwnerType INT;
DECLARE @messageOwnerDB INT;
DECLARE @MessageOwnerID INT;
SET @messageOwnerType = 3;
SET @messageOwnerDB = DB_ID();
EXECUTE [ADMINROTAS].[dbo].INSERT_MessageOwner @messageOwnerType, @messageOwnerDB, @MessageOwnerID = @MessageOwnerID OUTPUT
SELECT @MessageOwnerID
Кроме того, помните ключевое слово OUTPUT для всех и пару ключ-значение имени параметра и переменной (вы всегда должны использовать этот способ для вызова процедур).
Попробуй и вернись!