Announcement

Collapse
No announcement yet.

Resultset mit SP bestimmen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Resultset mit SP bestimmen

    Hallo,

    mein Problem ist kurz beschrieben.
    Ich rufe eine bestimmte Menge von Datensätzen mit Hilfe eines Cursors auf.
    Dann Manipuliere eine Spaltenwert, den ich mit dem Aufruf einer Funktion für jeden Datensatz separat fülle.
    Das klappt an sich auch ganz gut, wenn ich über den Query-Analyzer mir das Ergebnis ansehe, bekomme ich eigentlich auch was ich möchte.
    Das einzige Problem das ich habe ist, dass ich immer nur den letzten Datensatz als Ergebnis zurückbekomme, da die Ergebnisse einzeln statt als Gesamtes zurückgegeben werden.
    Ich brauche das Ergebnis aber als gesamtes ResultSet.

    Hier der Code:
    Code:
    ALTER      PROCEDURE [dbo].[dy_select_CustomerLink] 
    	(@CustomerID_1	int)
    AS
    SET CONCAT_NULL_YIELDS_NULL OFF 
    	-- Declare cursor for linked companies
            -- Definie CompanyContact as empty column
    	DECLARE CustLnk SCROLL CURSOR FOR
    		SELECT LinkedID, Comment, '' AS CompanyContact
    			FROM T_CustomerLink WHERE CustomerID = @CustomerID_1
    
    	DECLARE	@LinkedID_1		int
    		,@Comment_1		varchar(300)
    		,@CompanyContact_1	varchar(200)
    
    	OPEN CustLnk
    
    	-- for each select CompanyContact
    	FETCH NEXT FROM CustLnk INTO @LinkedID_1, @Comment_1, @CompanyContact_1
    	WHILE @@FETCH_STATUS = 0 
    	BEGIN
                    -- get CompanyContact
    		EXEC @CompanyContact_1 = dy_funct_get_CustomerCompany @LinkedID_1
    		SELECT @LinkedID_1 AS LinkedID, @Comment_1 AS Comment, @CompanyContact_1 AS CompanyContact
    		FETCH NEXT FROM CustLnk INTO @LinkedID_1, @Comment_1, @CompanyContact_1
    	END
    
    	CLOSE CustLnk
    	DEALLOCATE CustLnk
    SET CONCAT_NULL_YIELDS_NULL ON 
    GO
    Vielleicht kennt jemand eine schöne Lösung.
    Ich hab auch schon an einen temp. View gedacht.

    Danke

  • #2
    Meines Erachtens würde sich hier der Einsatz einer temp. Table anbieten. Also ein "declare @tmp table (feld1 int, ...)" und dann im cursor die einzelnen Sätze mit "insert @tmp select ... " zuerst in dieser temp. Table speichern und am Ende alle Records in dieser temp. Table mit einem "select * from @tmp" als Ergebnismenge zurückgeben.<br>
    bye, Helmu

    Comment


    • #3
      Genau, ne temporäre Tabelle hab ich gebraucht.
      Und dieses Konstrukt "@declare @tmp table" kannte ich bis dato nicht.
      Er sei bedankt. :

      Comment

      Working...
      X