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

Откуда:
Сообщений: 27
Всем доброго времени суток. Есть процедура Interbase. Она работает следующим образом, по одной машине может быть больше двух записей, т.е. с разной готовностью работы, а может быть и одна запись. Мне эту процедуру надо перевести на MS SQL.

Процедура Interbase -

+
if (:priznak=7 ) then
begin
n_=0; m_=0;
OUT_NP=''; out_vr='';
for select a.code_eq, a.gt, a.code_s from Work a where a.code_eq = :in_nm into :out_nm,:out_gt,:np
do begin
if (:np >0) then
begin
select substr(nm,1,6) from spr_n where Kd= :np into :nm;
if (:n_ >=1) then begin
OUT_NP = OUT_NP ||'/';
OUT_VR = OUT_VR ||'/';
end
OUT_NP = OUT_NP || :nm ;
m_=EXTRACT(MINUTE FROM :out_gt);
if (m_<=0) then m_c='00';
else m_c=m_;

OUT_VR = OUT_VR ||EXTRACT(HOUR FROM :out_gt)||':'|| m_c;
n_=n_+1;
end
end
end

Её значения необходимых выходных параметров -
out_nm = 1000; out_np = Станция1/Станция2; out_vr = 21:00/22:00 (разное время готовности)

Сделала на MS SQL табличную функцию -

+
ALTER FUNCTION [dbo].[FWork] (@IN_NM int, @IN_D date, @IN_NC int)
RETURNS @NAP TABLE



(out_np varchar (30),
code_eq int,
out_vr varchar(30),
code_st int)


AS

BEGIN


DECLARE


@code_eq int,
@out_gt datetime,
@code_st int,
@name varchar,
@out_np varchar(30),
@out_vr varchar(30),
@col_rec int;

set @out_np = '';
set @out_vr ='';



select @col_rec=count(A.code_eq) from dbo.Work A inner join dbo.spr_n B on A.code_st=B.code where A.code_eq = @IN_NM and A.data=@IN_D and A.NC=@IN_NC

if @col_rec>1

select @out_np=@out_np+substring(B.NAME,1,6)+'/',@code_eq=A.code_eq,
@out_vr=@out_vr+cast(DATEPART(hour,A.gt)as varchar)+':'+cast(DATEPART(minute,A.gt)as varchar)+'/',
@code_st=A.code_st from dbo.Work A inner join dbo.spr_n B on A.code_st=B.code where A.code_eq = @IN_NM and A.data=@IN_D and A.NC=@IN_NC

else
select @out_np=@out_np+substring(B.NAME,1,6),@code_eq=A.code_eq,
@out_vr=@out_vr+cast(DATEPART(hour,A.gt)as varchar)+':'+cast(DATEPART(minute,A.gt)as varchar),
@code_st=A.code_st from dbo.Work A inner join dbo.spr_n B on A.code_st=B.code where A.code_eq = @IN_NM and A.data=@IN_D and A.NC=@IN_NC



IF @IN_NMASH IS NOT NULL
BEGIN
INSERT @NAP
SELECT @out_np,@code_eq,@out_vr,@code_st
END;

RETURN
END


Сообщение было отредактировано: 27 окт 17, 17:30
27 окт 17, 12:57    [20906134]     Ответить | Цитировать Сообщить модератору
 Re: Перевод процедуры Interbase на MS SQL  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3708
Про доброе время суток и priznak=7 есть еще одна ветка рядом.

Это разные времена суток?
27 окт 17, 15:22    [20907021]     Ответить | Цитировать Сообщить модератору
 Re: Перевод процедуры Interbase на MS SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36970
Модератор: Хорош плодить топики. Так же все ваши сообщения и темы, которые будут содержать не отформатированные портянки кода, будут удаляться
27 окт 17, 16:59    [20907426]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить