Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Процедура выдачи книг  [new]
laferro
Member

Откуда:
Сообщений: 31
Подскажите, что не правильно?
При выполнении выдаёт ошибку:
Сообщение 213, уровень 16, состояние 1, процедура vydacha_book, строка 11
Имя столбца или число предоставленных значений не соответствует определению таблицы.
(подчёркивает Book_kod, Reader_kod, dbo.inserted)


Сама процедура выдачи книг:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================

create PROCEDURE vydacha_book
@b_kod int, @read_kod int

AS
insert into dbo.Books_Readers values (@b_kod, @read_kod)

BEGIN

declare my_kyrs cursor for select Book_kod, Reader_kod from dbo.inserted

open my_kyrs
Fetch next from my_kyrs into @b_kod,@read_kod while @@FETCH_STATUS=0
begin
if((select count from books where kod=@b_kod)>0)

begin
update books set count=count-1 where kod=@b_kod
insert into books_readers values (@b_kod, @read_kod, getdate(), getdate()+14)
end

else
print 'Извините, книги закончились..'
begin
print @b_kod
Fetch next from my_kyrs into @b_kod, @read_kod
end
end

close my_kyrs
deallocate my_kyrs


END
GO
23 ноя 15, 00:04    [18457317]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1723
laferro,

таблица или представление dbo.Books_Readers сколько столбцов содержит?

insert into dbo.Books_Readers values (@b_kod, @read_kod)

-так писать не кошерно. старайтесь указывать столбцы в которые данные будут непосредственно вставленны

к примеру так:
insert into dbo.Books_Readers (kod, read_kod) values (@b_kod, @read_kod)
23 ноя 15, 01:02    [18457447]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
laferro,
А что такое dbo.inserted?
И зачем тут курсор?
23 ноя 15, 09:06    [18457767]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mike_za
А что такое dbo.inserted?
И зачем тут курсор?

ТС продолжает мучаться с триггером из своей предыдущей темы.
Но почему то теперь называет триггер процедурой.
23 ноя 15, 09:20    [18457802]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1723
Glory,

наверное потому что завернул логику тригера в процедуру?

create PROCEDURE vydacha_book

23 ноя 15, 11:13    [18458281]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
laferro
Member

Откуда:
Сообщений: 31
Mike_za
laferro,
А что такое dbo.inserted?
И зачем тут курсор?


***
Инструкции триггеров DML используют две особые таблицы: таблицы deleted и inserted.
https://msdn.microsoft.com/ru-ru/library/ms191300(v=sql.120).aspx
***

Первое задание было создать триггер, который отслеживает процесс выдачи книг,
второе - процедуру выдачи книг.

Спасибо за вопрос - по-видимому, курсоры в процедурах не используются.
Буду думать другой вариант создания процедуры.
23 ноя 15, 22:41    [18461929]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
laferro
Member

Откуда:
Сообщений: 31
Glory
Mike_za
А что такое dbo.inserted?
И зачем тут курсор?

ТС продолжает мучаться с триггером из своей предыдущей темы.
Но почему то теперь называет триггер процедурой.


:) не угадали - следующее задание: создать процедуру выдачи книг.

Можно вопрос - а что такое "ТС" ? Турбо суслик )
23 ноя 15, 22:44    [18461939]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
laferro
Member

Откуда:
Сообщений: 31
felix_ff
laferro,

таблица или представление dbo.Books_Readers сколько столбцов содержит?

insert into dbo.Books_Readers values (@b_kod, @read_kod)

-так писать не кошерно. старайтесь указывать столбцы в которые данные будут непосредственно вставленны

к примеру так:
insert into dbo.Books_Readers (kod, read_kod) values (@b_kod, @read_kod)


Спасибо за совет - учту на будущее )
23 ноя 15, 22:46    [18461943]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
o-o
Guest
Турбо Суслик
на БМВ ХЗ
Картинка с другого сайта.
ТС = ТопикСтартер
23 ноя 15, 23:08    [18461988]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
laferro
Member

Откуда:
Сообщений: 31
o-o
Турбо Суслик
на БМВ ХЗ
Картинка с другого сайта.
ТС = ТопикСтартер


) спасибо за расшифровку

и-и-и клёвая бэха )
23 ноя 15, 23:19    [18462014]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
laferro
Member

Откуда:
Сообщений: 31
Благодаря Вашим "сопутствующим " ответам Родилась процедура..) даже работает ) только она выдаёт все книги одному читателю.. а как одновременно задать кол-во выдаваемых книг..? может натолкнёте на мысль, а может и додумаюсь, пока натолкнёте ) всё равно благодарю за "небезразличие" )
вот она:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================

create PROCEDURE vydacha_book
@b_kod int, @read_kod int

AS
BEGIN

insert into books_readers (Book_Kod, Reader_Kod, OnHand, EndHand) values (@b_kod, @read_kod, getdate(), getdate()+14)


END
GO
23 ноя 15, 23:26    [18462030]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
laferro, курсоры можно и нужно использовать там, где это оправданно.

TC-
Топиккастер
От англ. topic – «тема» и caster – «тот, кто бросает». Создатель новой темы на интернет-форуме
23 ноя 15, 23:26    [18462032]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1723
laferro,

не зная структуры вашей БД сложно что либо предположить. введите параметр @book_count и пляшите от него
23 ноя 15, 23:40    [18462065]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
Glory
Member

Откуда:
Сообщений: 104751
laferro
только она выдаёт все книги одному читателю..

И каким же волшебным образом это происходит, если у вас процедуре есть только один insert одной записи ?
24 ноя 15, 09:26    [18462587]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
laferro
Member

Откуда:
Сообщений: 31
Glory
laferro
только она выдаёт все книги одному читателю..

И каким же волшебным образом это происходит, если у вас процедуре есть только один insert одной записи ?


У меня уже есть триггер - который срабатывает на INSERT ) вот как-то так.. может в триггере всё дело..
24 ноя 15, 23:34    [18468180]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Mike_za
TC-
Топиккастер
От англ. topic – «тема» и caster – «тот, кто бросает». Создатель новой темы на интернет-форуме


А я-то думал, что это первые буквы слова Topic Starter
Можно ещё Thread Starter :)
25 ноя 15, 13:20    [18470520]     Ответить | Цитировать Сообщить модератору
 Re: Процедура выдачи книг  [new]
o-o
Guest
MrVoid
А я-то думал, что это первые буквы слова Topic Starter

ну так правильно и подумали.
ТС -- кириллические буквы.
это ТопикСтартер.
в гугл забейте вариант с кастером и со стартером,
он подскажет, чем большинство пользуется
25 ноя 15, 13:59    [18470768]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить