none
Openquery mit Parameter in inline Function RRS feed

  • Frage

  • Hallo an alle,

    ist es nicht möglich in einer Inline Function einen Parameter mitzugeben, welcher dann die SQL Abfrage einer Openquery beeinflusst?

    Oder denke ich einfach nur zu kompliziert?

    CREATE FUNCTION dbo.fnLIMS_D50 (@PRBTYP varchar(30))
    RETURNS TABLE
    AS
    
    RETURN
    
    --declare @PRBTYP varchar(30)
    declare @tsql varchar(8000)
    --set @PRBTYP='C100'
    select @tsql =
    '
    SELECT     TSTERC, TSTERN, PRBID, TSTELE, ERSDAT, ERSDAT_timestamp, ERSTIM,PRBDAT,PRBZEI
    FROM         OPENQUERY(AS400_DB2_OE0000DAT, 
                          ''select A.TSTERC,A.TSTERN,A.PRBID,A.TSTELE,B.ERSDAT,B.ERSTIM,B.PRBDAT,B.PRBZEI,
    						DATE(substr(B.ERSDAT, 1, 4)||''''-''''||SUBSTR(B.ERSDAT, 5, 2)||''''-''''||SUBSTR(B.ERSDAT, 7, 2)) as ERSDAT_timestamp,
    						                      
    						case 
    							WHEN LENGTH(TRIM(B.PRBDAT))= 7 then 
    							DATE(substr(B.PRBDAT, 4, 4)||''''-''''||SUBSTR(B.PRBDAT, 2, 2)||''''-''''||SUBSTR(B.PRBDAT, 1, 1)) --Länge nur 7 Zeichen: 1092008 
    							WHEN LENGTH(TRIM(B.PRBDAT))= 8 then 
    							DATE(substr(B.PRBDAT, 5, 4)||''''-''''||SUBSTR(B.PRBDAT, 3, 2)||''''-''''||SUBSTR(B.PRBDAT, 1, 2)) --Länge nur 8 Zeichen: 27082008
    							END as PRBDAT_timestamp	  
    
                          from OE0000DAT.OE02000PF A JOIN OE0000DAT.OE01600PF B on 
    		A.PRBID = B.PRBID 
    
    		where B.PRBID in (select C.PRBID from OE0000DAT.OE01600PF C where PRBTYP=''''' + @PRBTYP + ''''' and SPEZIF=''''6/1'''' order by PRBID desc) 
    			and A.TSTELE=''''X50%''''        
    		'') ' 
    EXEC(@tsql)
    		

      

    Donnerstag, 2. Juni 2016 13:06

Antworten

Alle Antworten

  • Hallo,

    die Funktion ist vom Aufbau her schon mal falsch, wenn man mehr als eine SQL Anweisung hat, muss man den ganzen Code Rumpf in einen BEGIN/END Block setzten.

    In einer Funktion kann man keine Stored Procedures oder dyn SQL Aufrufen, das geht nicht. Versucht man es trotzdem, gibt es bereits bei der Anlage der UDF die Fehlermeldung "Ungültige Verwendung eines EXECUTE STRING-Operators mit Nebenwirkungen innerhalb einer Funktion.".


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 2. Juni 2016 13:17
  • Hallo Olaf,

    du rettest mir nicht gerade den Tag damit. *g* Aber nun weiß ich das wenigstens auch. Aber gibt es dann überhaupt eine Möglichkeit meinen Ziel näher zu kommen?

    Hast du eine Idee?

    Donnerstag, 2. Juni 2016 13:20
  • Das kannst Du nur als Stored Procedure umsetzen.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 2. Juni 2016 14:15
  • Hallo Olaf, die Openquery möchte ich aber als Quelle für SSRS nutzen. Der Parameter soll vom Bericht gesetzt werden bzw. vom User bei Berichtsaufruf. ich habe leider noch nichts gefunden wie ich eine Stored Procedure in SSRS in einer schon bestehenden Abfrage nutzen kann.

    Das heißt ich möchte eine Stored Procedure im Abfrage Designer einer anderen Dataset nutzen. Damit ich Schlüssel, Group by und co nutzen könnte. Das scheint aber nicht möglich zu sein. Oder??

    Dienstag, 7. Juni 2016 08:07
  • ich habe leider noch nichts gefunden wie ich eine Stored Procedure in SSRS als Dataset nutzen kann.

    Dafür gibt es extra den Abfragetyp = Gespeicherte Prozedure.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 7. Juni 2016 09:19
  • Schade du warst doch schon zu schnell. Das hatte ich dann noch durch einen Zufall gefunden. Danke trotzdem!

    kann man aber auch im Abfrage Designer einer bestehenden Dataset eine Stored Procedure nutzen? Die Tabellenstrukur (wenn eine solche zurückgegeben wird) steht ja schon fest und man könnte die Spalten so miteinander verbinden. Das wäre mir das liebste! So muss ich bei SSRS immer erst alles programmieren.

    Dienstag, 7. Juni 2016 09:35
  • Bei einem bestehenden Dataset kannst Du einfach den Abfragetext auf

    EXEC dbo.spNameDerSP

    ändern oder Du wechselst auf Typ SP; in beiden Fällen werden nach der Änderungen die Feldnamen neu ermittelt.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 7. Juni 2016 10:05
  • Hallo Olaf,

    ja du hast völlig recht aber das war nicht das was ich suche. Ich möchte im Abfrage Designer eine Stored Procedure nutzen. Also z.b. wie über das Kontextmenü eine Tabelle hinzufügen. So etwas geht wohl nicht? 

    Dienstag, 7. Juni 2016 12:29
  • Nein, das geht nicht. Packe die gesamte Logik in die Stored Procedure.

    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Dienstag, 7. Juni 2016 12:51
    Beantworter
  • oh Gott das wird hart! Aber danke für die Info!
    Dienstag, 7. Juni 2016 19:33