|
Скрипт | Исходник | Описание
Функция, проверяющая занятость оборудования на указанном промежутке времени. Данная проверка является необходимой во многих сферах: автосервис, запись в салон красоты, солярий. Функция возвращает сообщение ошибки, понятное пользователю, если сообщение пустое - оборудование свободно.
ALTER FUNCTION [dbo].[control_obor] (@datnewB datetime,@datnewE datetime,@U int) RETURNS varchar(500) AS BEGIN
Declare @message varchar(500) Declare @messageA varchar(500) Declare @I_ID int, @I_name varchar(100),@I_kolb int,@I_kol int Set @message = '' Set @messageA = ''
Declare cur CURSOR LOCAL FOR select UI.ins,I.name,sum(1),max(I.kol) from bronus B with(nolock) --join usinstr UI On UI.uslugaid = B.usluga and instrumentid in (select instrumentid from usinstr where uslugaid = @U) --left join instrument I On I.ID = UI.Instrumentid join bronins UI On UI.zapis = B.ID and UI.Ins in (select instrumentid from usinstr where uslugaid = @U) left join instrument I On I.ID = UI.Ins where 1=1 and (B.starttime > @datnewB and B.starttime < @datnewE) or (B.endtime > @datnewB and B.endtime < @datnewE) or (@datnewB > B.starttime and @datnewB < B.endtime) or (@datnewE > B.starttime and @datnewE < B.endtime) or (@datnewB = B.starttime and @datnewE = B.endtime) group by UI.ins,I.name
Open cur Fetch next from cur into @I_ID, @I_name,@I_kolb,@I_kol While @@FETCH_STATUS = 0 Begin
if @I_kolb >= @I_kol begin Set @messageA = (select [dbo].[control_obor_Instr](@datnewB,@datnewE,@I_ID)) If @messageA <> '' begin If @messageA = '-' set @messageA='' Set @message = @message+' - '+@I_name+char(10)+char(13)+@messageA+char(10)+char(13) end end
Fetch next from cur into @I_ID, @I_name,@I_kolb,@I_kol End
If @message <>'' set @message = 'Следующее оборудование занято:'+char(10)+char(13)+@message
RETURN @message END
|