2016-06-20 10 views
1

Ich bin in dem Prozess eine Reihe von Funktion von DB2 zu SQL Server umzuwandeln und dies hat mich stecken, habe ich die Funktion von diesem umgewandelt dies:Konvertieren von DB2-Funktion zu SQL-Server-Funktion

create function prf_t_excinter_nzw(@AC_ID_i int,@TFH_i float) 
RETURNS TABLE 
RETURN select l.ft_id, l.rg_id, r.thr,case when l.from_value is null then to_value else (thr-from_value)/(to_value-from_value)*(to_value-from_value)+from_value end as value 
from (
select ft_id,rg_id,to_value,from_value,to_value,from_value 
from (
    select row_number() over (partition by l.ft_id, l.rg_id, l.thr order by l.ft_id,l.rg_id, l.thr, r.thr desc) as num, l.ft_id, l.rg_id, l.to_value, r.from_value 
    from (
     select ft_id, rg_id, thr, ac_value as to_value 
     from prf_t_ftexc_nzw(@AC_ID_i,@TFH_i) as d) as l 
     left outer join (
      select ft_id, rg_id, thr, ac_value as from_value 
      from prf_t_ftexc_nzw(@AC_ID_i,@TFH_i) as d) as r 
      on l.ft_id = r.ft_id 
      and l.rg_id=r.rg_id 
      and l.thr > r.thr) as l_r 
      where num = 1) as l 
      join (
       select prm_id, thr from prf_t_prm_1d_thr as r 
       where prm_id in (select id from prf_t_prm where name like '%RG_NZW')) as r 
       on l.rg_id=r.prm_id and (l.from_value<r.thr or l.from_value is null) 
       and (r.thr<=l.to_value) 

an dieser Stelle ich erhalte den Fehler Msg 8156, Ebene 16, Status 1, Prozedur prf_t_excinter_nzw, Zeile 18 die Spalte ‚to_value‘ wurde/mehrmals für ‚l‘ alle Tipps angegeben Vorschläge zu beheben?

+0

Haben Sie versucht, SSMA 6.0.1 für DB2-Tool von der Microsoft. http://www.microsoft.com/en-us/download/details.aspx?id=51216 – Hiten004

+0

@ Hiten004 Ich habe versucht, es mit SSMA 6.0.0 zu konvertieren, aber es ist fehlgeschlagen, ich kann es mit der neuesten Version versuchen, denke, es ist 6.0.2 – James

+1

Haben Sie den Fehler untersucht. Ich denke du möchtest das als Frage stellen !! – Hiten004

Antwort

1

Die fünfte Zeile einen Fehler auf jeden Fall erzeugt:

select ft_id,rg_id,to_value,from_value,to_value,from_value 

Sie haben to_value und from_value zweimal in der SELECT Liste aufgeführt. Dies wäre in Ordnung, wenn nicht eine Unterabfrage, aber da es eine Unterabfrage ist, benötigen Sie eindeutige Namen für jedes Feld, und in diesem Fall sind sie redundant, so dass die Duplikate nur entfernt werden müssen.

Die Fehlermeldung verweist Sie auf das Objekt l, das der Alias ​​ist, den Sie der Unterabfrage gegeben haben, die mit der oben erwähnten problematischen SELECT-Zeile beginnt.

Diese Probleme können leichter behoben werden, wenn Sie Aliase für verschiedene Objekte in einer Abfrage nicht erneut verwenden, da hier ein paar Dinge mit der Bezeichnung l stehen.

+1

schönen Fang schreiben, bekam ein wenig davon getragen, die geschützten Namen ändern, Danke! das hat es behoben! – James

0

Das Problem ist, dass in der zweiten Ebene gibt es zwei mal das Feld "to_value".

Löschen