none
SSRS Feldliste fehlt bei Dataset aus Stored Procedure RRS feed

  • Frage

  • Hallo,

    ich habe einen Report, der sein Dataset aus einer SP bezieht. In der SP habe ich zwei Felder ergänzt. Jetzt hat der Report im Visual Studio keine Feldliste mehr. Der "Felder aktualisieren"-Button hilft nicht. Andere SP, die ich in diesen Report einbinde, klappen. Diese SP in einem neuen Report klappt nicht. Die SP im Managementstudio ausgeführt liefert ein fehlerfreies Ergebnis. Wo muß ich nach dem Fehler suchen? Sicher in der SP, aber wo?

    Für jeden Tipp dankbar,
    Ulf

    SQL-Server 2008
    Hier die SP:

    CREATE PROCEDURE dbo.p_rpt_verkaeufer_debitoren_info

      @VK varchar(10),

      @Quoten_Vgl VARCHAR(30),

      @ABC VARCHAR(5)

    AS

    BEGIN

      /* Procedure body */

      DECLARE @Spalte varchar(10),@Zeile varchar(30),@Pos_Split INT, @Where_Klausel VARCHAR(200), @Sql_String nvarchar(4000)

     

    Set @Where_Klausel='';

     

    If Len(@ABC)=0 or @ABC is null

    begin

    goto Q_VGL

    end

    else

    begin

    Set @Where_Klausel=' AND debitor.ABC_Klasse = ' + QUOTENAME(@ABC,'''')

    goto Daten_Part

    End

     

    Q_VGL:

    If Len(@Quoten_Vgl)=0 or @Quoten_Vgl is null

    Begin

      goto DATEN_Part

    END

     

      Set @Pos_Split=CHARINDEX('|',@Quoten_Vgl);

      SET @Spalte=SUBSTRING(@Quoten_Vgl,1,(@Pos_Split-1));

      Set @Zeile=Substring(@Quoten_Vgl,@Pos_Split+1,Len(@Quoten_Vgl)-(@Pos_Split))

     

      print '!';

     

      if @Spalte='AJ_BU_Total'

      BEGIN

      Set @Where_Klausel = 'debitor.Quote_Ges_AJ_Bud_YTD '

      End

     

      if @Spalte='AJ_BU_LKW'

      BEGIN

      Set @Where_Klausel = 'debitor.Quote_LKW_AJ_Bud_YTD '

      End

     

      if @Spalte='AJ_BU_Pkw'

      BEGIN

      Set @Where_Klausel ='debitor.Quote_PKW_AJ_Bud_YTD '

      End

     

      if @Spalte='AJ_VJ_Total'

      BEGIN

      Set @Where_Klausel = 'debitor.Quote_Ges_AJ_VJ_YTD '

      End

     

      if @Spalte='AJ_VJ_LKW'

      BEGIN

      Set @Where_Klausel = 'debitor.Quote_LKW_AJ_VJ_YTD '

      End

     

      if @Spalte='AJ_VJ_Pkw'

      BEGIN

      Set @Where_Klausel = 'debitor.Quote_PKW_AJ_VJ_YTD '

      End

     

      If @Zeile='>=1'

      BEGIN

      Set @Zeile='>1'

      end

     

      If @Zeile='>=0,8'

      BEGIN

      Set @Zeile='Between 0.8001 and 1'

      end

     

      If @Zeile='>=0,6'

      BEGIN

      Set @Zeile='Between 0.6001 and 0.8'

      end

     

      If @Zeile='>=0,5'

      BEGIN

      Set @Zeile='Between 0.5001 and 0.6'

      end

     

      If @Zeile='<0,5'

      BEGIN

      Set @Zeile='Between 0.0 and 0.5'

      end

     

      If @Zeile='#nv'

      BEGIN

      Set @Zeile='is null'

      end

     

    If Len(@Quoten_Vgl)>0

    BEGIN

    Set  @Where_Klausel=' AND ' + @Where_Klausel + @Zeile

    end

    else

    begin

    Set  @Where_Klausel=''

    end

     

     

     

    DATEN_Part:

     

    Set @VK=QUOTENAME(@VK,'''')

    Set @Sql_String='select distinct debitor.KdNr,

    ''navision://client/run?target=Form%2021%26view=SORTING(Field1)%26position=Field1=0'' + debitor.KdNr + ''%26servertype=MSSQL ;'' AS Nav_Link,

    debitor.Name_1,

    debitor.Ort,

    debitor.Saldo,

    debitor.VerkauferCode as VK_PKW_ID,

    debitor.VK_PKW_Aussendienst as VK_PKW_AD,

    debitor.VK_LKW_Aussendienst as VK_LKW_AD,

    debitor.VK_LKW_Innendienst as VK_LKW_ID,

    debitor.Umsatz_AJ_Netto,

    debitor.Umsatz_VJ_Netto,

    debitor.Umsatz_VJ_Netto_YTD,

    debitor.Umsatz_AJ_LKW,

    debitor.Umsatz_AJ_PKW,

    debitor.Umsatz_VJ_PKW_YTD,

    debitor.Umsatz_VJ_LKW_YTD,

    debitor.Roherloes_AJ_Fest_Netto,

    debitor.Roherloes_VJ_Fest_Netto,

    debitor.Roherloes_VJ_Fest_Netto_YTD,

    debitor.Bonitaetsindex,

    debitor.Roherloes_AJ_Fest,

    debitor.Letzter_Verkauf,

    debitor.Letzter_Kontakt,

    debitor.Kreditlimit,

    debitor.ABC_Klasse,

    debitor.ABC_Wert,

    debitor.Mahstufe,

    nav.Budget_Ums_auf_P,

    nav.Budget_Ums_auf_L,

    nav.Budget_Ums_Jahr_P,

    nav.Budget_Ums_Jahr_L,

    debitor.Quote_Ges_AJ_Bud_Total,

    debitor.Quote_Ges_AJ_Bud_YTD,

    debitor.Quote_Ges_AJ_VJ_YTD,

    debitor.Quote_LKW_AJ_Bud_Total,

    debitor.Quote_LKW_AJ_Bud_YTD,

    debitor.Quote_LKW_AJ_VJ_YTD,

    debitor.Quote_PKW_AJ_Bud_YTD,

    debitor.Quote_PKW_AJ_Bud_Total,

    debitor.Quote_PKW_AJ_VJ_YTD,

    debitor.Umsatz_AM_netto,

    debitor.Umsatz_AM_VJ_netto

     

    from debitor

    Left JOIN dbo.tbl_nav_debitor_budget nav on(dbo.debitor.KdNr=nav.KdNr)

    where (debitor.VerkauferCode = '+ @VK +')' + @Where_klausel + '

      order by

    debitor.KdNr'

     

    --print @Sql_String

     

    exec sp_executesql @Sql_String

     

     

    END

    Donnerstag, 17. September 2009 19:20

Antworten

  • Hallo Ulf,
    ich gehe in solchen Fällen etwas anders vor. Ich erstelle in der Prozedur eine Tabellenvariable "declare @meineTab table(felder...)" und füge dann die Daten dort ein:
    insert into @meineTab
    exec (@SQL_String);
    Danach kommt ein billiges Select auf @meineTab mit kompletter Feldliste, die ich im Report sehen möchte.
    Select feldliste from @meineTab;
    Return

    Fertig!

    Evtl. hilft es auch die Parameter der Prozedur mit Werten zu initialisieren.
    CREATE PROCEDURE dbo.p_rpt_verkaeufer_debitoren_info 
      @VK varchar(10) = 'Wert', ...


    Einen schönen Tag noch, Christoph Muthmann Microsoft SQL Server MVP, http://www.insidesql.org
    Freitag, 18. September 2009 05:56
  • Hallo Christoph,

    der Tipp hat mich auf die Lösung gebracht.  Wenn man ein Dataset hinzufügt, werden die Parameter abgefragt, ich hatte die auf <NULL> stehen lassen. Wenn ich sie auf <LEER> ändere, sehe ich auch meine Feldliste. Von da aus kann ich jetzt weiter basteln.

    Danke Ulf

    Freitag, 18. September 2009 10:25

Alle Antworten

  • Hallo Ulf,
    ich gehe in solchen Fällen etwas anders vor. Ich erstelle in der Prozedur eine Tabellenvariable "declare @meineTab table(felder...)" und füge dann die Daten dort ein:
    insert into @meineTab
    exec (@SQL_String);
    Danach kommt ein billiges Select auf @meineTab mit kompletter Feldliste, die ich im Report sehen möchte.
    Select feldliste from @meineTab;
    Return

    Fertig!

    Evtl. hilft es auch die Parameter der Prozedur mit Werten zu initialisieren.
    CREATE PROCEDURE dbo.p_rpt_verkaeufer_debitoren_info 
      @VK varchar(10) = 'Wert', ...


    Einen schönen Tag noch, Christoph Muthmann Microsoft SQL Server MVP, http://www.insidesql.org
    Freitag, 18. September 2009 05:56
  • Hallo Christoph,

    der Tipp hat mich auf die Lösung gebracht.  Wenn man ein Dataset hinzufügt, werden die Parameter abgefragt, ich hatte die auf <NULL> stehen lassen. Wenn ich sie auf <LEER> ändere, sehe ich auch meine Feldliste. Von da aus kann ich jetzt weiter basteln.

    Danke Ulf

    Freitag, 18. September 2009 10:25