Консультация № 182812
11.04.2011, 21:59
59.48 руб.
0 1 0
есть тригер,идет инсерт в приход склад. Проверяет есть ли в приходе на склад складID с номером таким как в инсерте.если есть то обьеденяется сумма с инсертом и идет проверка есть ли в заявках заявка на покупку детали с складID ,если есть то каждую заявку(если их больше 1)он построчно проверяет и если сумма прихода склад.количество>= того что в заявке ,то построчно выполняется добавление количества.заявки в склад, а остаток отправляет на приход склад после этого заявка удаляется.
Основная проблема как выполнить цикл проверки заявок по 1й строчке. У меня только первую заявку обробатывает и выходит с цикла.

2я почемуто проверка наличия в приходе_склад данного складаID не проходит.
USE [relliko2]
GO
/****** Object: Trigger [dbo].[удаление_заявка_на_поставку] Script Date: 04/11/2011 20:31:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Batch submitted through debugger: SQLQuery22.sql|7|0|C:\Temp\~vs154.sql
-- Batch submitted through debugger: SQLQuery1.sql|7|0|C:\Temp\~vsA4.sql
ALTER TRIGGER [dbo].[удаление_заявка_на_поставку] ON [dbo].[Приход_склад]
FOR INSERT
AS
DECLARE @Новоечисло datetime,
@новыйпоставщик varchar(40),
@новоеколичество real,
@новаяценапоставки real,
@новыйработникID int,
@новыйскладID real,
@новоеколичествоЗаявки int,
@количествовприходе real

SELECT @Новоечисло = дата_поставки,@новыйпоставщик = поставщикID,
@новаяценапоставки=цена_поставки,
@новыйработникID=РаботникID,@новыйскладID=складID,@новоеколичество = количество
FROM INSERTED
/* если проиход существует*/
IF EXISTS (select * from dbo.Приход_склад where dbo.Приход_склад.складID = @новыйскладID )
begin
select @количествовприходе = количество+@новоеколичество from dbo.Приход_склад/* where складID = @новыйскладID */

while EXISTS
(select 1
from dbo.заявка_на_поставку
where dbo.заявка_на_поставку.количество <= @количествовприходе and dbo.заявка_на_поставку.складID = @новыйскладID)
begin
select @новоеколичествоЗаявки = количество from dbo.заявка_на_поставку
where dbo.заявка_на_поставку.количество <= @количествовприходе and dbo.заявка_на_поставку.складID = @новыйскладID

update dbo.склад
set количество = количество+ @новоеколичествоЗаявки/*@новоеколичество*/
where склад.складID = @новыйскладID And dbo.склад.цена = @новаяценапоставки

select @количествовприходе = @количествовприходе-@новоеколичествоЗаявки

update dbo.Приход_склад
set количество = @количествовприходе
where dbo.Приход_склад.складID = @новыйскладID and dbo.Приход_склад.цена_поставки = @новаяценапоставки

DELETE FROM dbo.заявка_на_поставку
where складID=@новыйскладID

end
end
else while EXISTS
(select 1
from dbo.заявка_на_поставку
where dbo.заявка_на_поставку.количество <= @количествовприходе and dbo.заявка_на_поставку.складID = @новыйскладID)
begin
select @новоеколичествоЗаявки = количество from dbo.заявка_на_поставку
where dbo.заявка_на_поставку.количество <= @количествовприходе and dbo.заявка_на_поставку.складID = @новыйскладID

update dbo.склад
set количество = количество+ @новоеколичествоЗаявки/*@новоеколичество*/
where склад.складID = @новыйскладID And dbo.склад.цена = @новаяценапоставки

select @количествовприходе = @количествовприходе-@новоеколичествоЗаявки

update dbo.Приход_склад
set количество = @количествовприходе
where dbo.Приход_склад.складID = @новыйскладID and dbo.Приход_склад.цена_поставки = @новаяценапоставки

DELETE FROM dbo.заявка_на_поставку
where складID=@новыйскладID

end

Обсуждение

Неизвестный
11.04.2011, 22:00
общий
сама база
Прикрепленные файлы:
24eb5c0476c69507c0afd71107edc47e.rar
Форма ответа