Я уверен, что это легко исправить, но я не могу найти ответ здесь.Прошло много лет с тех пор, как я написал хранимые процедуры.
Это мои процедуры:
Эта первая работает и возвращает только что созданный идентификатор.
ALTER PROCEDURE [dbo].[sp_CreateBytegymType]
@Name NVARCHAR(200),
@Type NCHAR(1),
@Description NVARCHAR(MAX) NULL,
@Comment NVARCHAR(MAX) NULL,
@Source NVARCHAR(MAX) NULL,
@BtId INT OUTPUT
AS
BEGIN
SET NOCOUNT ON
INSERT INTO BytegymType
VALUES (@Name, @Type, @Description, @Comment, @Source)
SET @BtId = CAST(SCOPE_IDENTITY() AS INT)
END
Второй вызывает первый:
ALTER PROCEDURE [dbo].[sp_CreateMuscle]
@Name NVARCHAR(200),
@Type NCHAR(1),
@Description NVARCHAR(MAX) NULL,
@Comment NVARCHAR(MAX) NULL,
@Source NVARCHAR(MAX) NULL,
@Group NVARCHAR(20) NULL
AS
BEGIN
DECLARE @BtId int
EXEC sp_CreateBytegymType
@Name = @Name,
@Type = @Type,
@Description = @Description,
@Comment = @Comment,
@Source = @Source,
@BtId = @BtId
INSERT INTO Muscle
VALUES (@BtId, @Group)
END
Я получаю следующую ошибку:
Сообщение 515, Уровень 16, Состояние 2, Процедура sp_CreateMuscle, Строка 20 [Стартовая строка запуска2]
Невозможно вставить значение NULL в столбец 'BtId'
Кажется, я не сохраняю значение @BtId
.Нужно ли вводить его в новое значение после выполнения sp_CreateBytegymType
?
Также я хотел бы сделать это транзакционным способом.Поэтому, если вставка в Muscle не удалась, она должна откатить хранимую процедуру вставки.