T-SQL застрял на возвращении scope_identity из хранимой процедуры - PullRequest
0 голосов
/ 13 октября 2018

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

Это мои процедуры:

Эта первая работает и возвращает только что созданный идентификатор.

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 не удалась, она должна откатить хранимую процедуру вставки.

1 Ответ

0 голосов
/ 13 октября 2018

Вам необходимо добавить OUTPUT:

exec sp_CreateBytegymType
    @Name = @Name,
    @Type = @Type,
    @Description = @Description,
    @Comment = @Comment,
    @Source = @Source,
    @BtId = @BtId OUTPUT;

Кроме того, префикс пользовательских хранимых процедур с sp_ не рекомендуется.Статья по теме: Префикс sp_ по-прежнему запрещен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...