Загрузка данных


create proc sp_выдать_книгу
    @код_книги int,
    @код_читателя int,
    @сообщение nvarchar(100) output
as
begin
    -- Проверяем, есть ли книга в наличии
    if (select количество_экземпляров from книги where код_книги = @код_книги) > 0
    begin
        -- Ищем следующий номер для выдачи
        declare @new_id int = (select isnull(max(код_выдачи), 0) + 1 from выдачи);
        
        -- Выдаем книгу (дата возврата пустая)
        insert into выдачи (код_выдачи, код_книги, код_читателя, дата_выдачи, дата_возврата) 
        values (@new_id, @код_книги, @код_читателя, getdate(), null);
        
        -- Уменьшаем количество на складе
        update книги set количество_экземпляров = количество_экземпляров - 1 
        where код_книги = @код_книги;
        
        set @сообщение = 'Успешно выдана';
    end
    else
    begin
        set @сообщение = 'Ошибка: нет экземпляров';
    end
end

declare @msg nvarchar(100);
execute sp_выдать_книгу 2, 5, @msg output; -- Выдаем книгу №2 читателю №5
select @msg;