Benutzer mit den meisten Antworten
SSRS Feldliste fehlt bei Dataset aus Stored Procedure

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
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- Als Antwort markiert Robert BreitenhoferModerator Sonntag, 27. September 2009 19:05
-
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
- Als Antwort markiert Robert BreitenhoferModerator Sonntag, 27. September 2009 19:06
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- Als Antwort markiert Robert BreitenhoferModerator Sonntag, 27. September 2009 19:05
-
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
- Als Antwort markiert Robert BreitenhoferModerator Sonntag, 27. September 2009 19:06