Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Занесение данных в запись из хранимой процедуры / 8 сообщений из 8, страница 1 из 1
15.04.2020, 09:36
    #39947357
AMDshnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных в запись из хранимой процедуры
Приветствую!
Цель такая: нужно обновить записи в таблице bilety суммой столбцов stoimost (стоимость сеанса) и kolbil (количество билетов). Реализовать нужно с помощью хранимой процедуры или триггера. У меня уже заполнены данными kolbil и bseans в таблице bilety , а теперь нужно обновить эти записи добавив в них третье значение в summa .
То, что я написал - конечно же, не работает. Выдает ошибку:
авторMsg 512, Level 16, State 1, Procedure summa_proc, Line 3 [Batch Start Line 0]
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.
Выполнение данной инструкции было прервано.

table seans
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE seans
(
	idseans INT NOT NULL PRIMARY KEY IDENTITY,
	sfilm INT NOT NULL,
	datepokaz DATE NOT NULL,
	vrpokaz TIME(0) NOT NULL,
	stoimost MONEY NOT NULL,
	szal INT NOT NULL,
)



table bilety
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE bilety
(
	idbil INT NOT NULL PRIMARY KEY IDENTITY,
	bseans INT NOT NULL,
	kolbil INT NOT NULL,
	summa MONEY,
	FOREIGN KEY (bseans) REFERENCES seans (idseans)
)



Нерабочий код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE PROCEDURE summa_proc_1 as
BEGIN
	
	DECLARE @summa_b MONEY
	SET @summa_b = (SELECT stoimost * kolbil AS summa 
		FROM seans
		JOIN bilety 
		ON seans.idseans = bilety.idbil)

	UPDATE bilety 
	SET summa = @summa_b
END;
...
Рейтинг: 0 / 0
15.04.2020, 09:46
    #39947365
AMDshnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных в запись из хранимой процедуры
Еще забыл, получается, что нужен еще и цикл, в котором будут обновляться записи в таблице, тоже реализовать не очень понимаю как.
Нужно будет обновлять summa для каждой записи, т.е. нужно как-то сделать обновление для каждой новой записи, увиличивая idbil на 1.
...
Рейтинг: 0 / 0
15.04.2020, 10:37
    #39947378
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных в запись из хранимой процедуры
AMDshnik
Еще забыл, получается, что нужен еще и цикл, в котором будут обновляться записи в таблице, тоже реализовать не очень понимаю как.
Нужно будет обновлять summa для каждой записи, т.е. нужно как-то сделать обновление для каждой новой записи, увиличивая idbil на 1.


Вам наверное сумма по всем билетам нужна

Код: sql
1.
2.
3.
4.
SELECT SUM(stoimost * kolbil) AS summa 
		FROM seans
		JOIN bilety 
		ON seans.idseans = bilety.idbil
...
Рейтинг: 0 / 0
15.04.2020, 10:39
    #39947379
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных в запись из хранимой процедуры
a_voronin
AMDshnik
Еще забыл, получается, что нужен еще и цикл, в котором будут обновляться записи в таблице, тоже реализовать не очень понимаю как.
Нужно будет обновлять summa для каждой записи, т.е. нужно как-то сделать обновление для каждой новой записи, увиличивая idbil на 1.


Вам наверное сумма по всем билетам нужна

Код: sql
1.
2.
3.
4.
5.
SELECT SUM(stoimost * kolbil) AS summa, count(*) AS C,seans.idseans
		FROM seans
		JOIN bilety 
		ON seans.idseans = bilety.idbil
GROUP BY seans.idseans

...
Рейтинг: 0 / 0
15.04.2020, 11:40
    #39947414
AMDshnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных в запись из хранимой процедуры
a_voronin, проблема чуть в другом заключается. Сумму по билетам то я могу сделать, а вот занести позже эти данные в таблицу с уже заполненными записями не выходит.
...
Рейтинг: 0 / 0
15.04.2020, 11:46
    #39947417
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных в запись из хранимой процедуры
А так:
Код: sql
1.
2.
3.
4.
UPDATE B
 SET SUMMA=B.KOLBIL*S.STOIMOST
FROM BILETY AS B
JOIN SEANS AS S ON B.BSEANS=S.IDSEANS
...
Рейтинг: 0 / 0
15.04.2020, 12:53
    #39947457
nullin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных в запись из хранимой процедуры
Можно через CTE ещё
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
with T as 
(select b.summa, s.stoimost * b.kolbil as s
   from seans as s
  inner join bilety as b
     on s.idseans = b.bseans)

update T
   set summa = s
...
Рейтинг: 0 / 0
15.04.2020, 14:03
    #39947488
AMDshnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Занесение данных в запись из хранимой процедуры
londinium, сработало, спасибо за помощь!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Занесение данных в запись из хранимой процедуры / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]