Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Mike_za Member Откуда: Москва Сообщений: 1176 |
laferro, А что такое dbo.inserted? И зачем тут курсор? |
23 ноя 15, 09:06 [18457767] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
ТС продолжает мучаться с триггером из своей предыдущей темы. Но почему то теперь называет триггер процедурой. |
||
23 ноя 15, 09:20 [18457802] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1723 |
Glory, наверное потому что завернул логику тригера в процедуру? create PROCEDURE vydacha_book ![]() |
23 ноя 15, 11:13 [18458281] Ответить | Цитировать Сообщить модератору |
laferro Member Откуда: Сообщений: 31 |
*** Инструкции триггеров DML используют две особые таблицы: таблицы deleted и inserted. https://msdn.microsoft.com/ru-ru/library/ms191300(v=sql.120).aspx *** Первое задание было создать триггер, который отслеживает процесс выдачи книг, второе - процедуру выдачи книг. Спасибо за вопрос - по-видимому, курсоры в процедурах не используются. Буду думать другой вариант создания процедуры. |
||
23 ноя 15, 22:41 [18461929] Ответить | Цитировать Сообщить модератору |
laferro Member Откуда: Сообщений: 31 |
:) не угадали - следующее задание: создать процедуру выдачи книг. Можно вопрос - а что такое "ТС" ? Турбо суслик ) |
||||
23 ноя 15, 22:44 [18461939] Ответить | Цитировать Сообщить модератору |
laferro Member Откуда: Сообщений: 31 |
Спасибо за совет - учту на будущее ) |
||
23 ноя 15, 22:46 [18461943] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
Турбо Суслик ![]() на БМВ ХЗ ![]() ТС = ТопикСтартер |
23 ноя 15, 23:08 [18461988] Ответить | Цитировать Сообщить модератору |
laferro Member Откуда: Сообщений: 31 |
) спасибо за расшифровку и-и-и клёвая бэха ) |
||
23 ноя 15, 23:19 [18462014] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Mike_za Member Откуда: Москва Сообщений: 1176 |
laferro, курсоры можно и нужно использовать там, где это оправданно. TC- Топиккастер От англ. topic – «тема» и caster – «тот, кто бросает». Создатель новой темы на интернет-форуме |
23 ноя 15, 23:26 [18462032] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1723 |
laferro, не зная структуры вашей БД сложно что либо предположить. введите параметр @book_count и пляшите от него |
23 ноя 15, 23:40 [18462065] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
И каким же волшебным образом это происходит, если у вас процедуре есть только один insert одной записи ? |
||
24 ноя 15, 09:26 [18462587] Ответить | Цитировать Сообщить модератору |
laferro Member Откуда: Сообщений: 31 |
У меня уже есть триггер - который срабатывает на INSERT ) вот как-то так.. может в триггере всё дело.. |
||||
24 ноя 15, 23:34 [18468180] Ответить | Цитировать Сообщить модератору |
MrVoid Member Откуда: Сообщений: 333 |
А я-то думал, что это первые буквы слова Topic Starter ![]() Можно ещё Thread Starter :) |
||
25 ноя 15, 13:20 [18470520] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ну так правильно и подумали. ТС -- кириллические буквы. это ТопикСтартер. в гугл забейте вариант с кастером и со стартером, он подскажет, чем большинство пользуется |
||
25 ноя 15, 13:59 [18470768] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |