rewer 10 Geschrieben 18. März 2015 Melden Teilen Geschrieben 18. März 2015 Hallo zusammen, ich habe ein Riesenproblem mit der Performance von Stored Procs's auf dem MS SQL Server (2014). Wenn ich einen bestimmtes Code-Fragment in eine Stored Proc packe, wird der Code extrem langsam bzw. führt das sogar zu einem Timeout. Führe ich denselben Code im Management-Studio als Abfrage aus, läuft der Code einwandfrei. Wer kann mir unter Umständen mal Tipps geben, wo ich da anfangen soll zu suchen? Ich bin für jeden Hinweis dankbar. Gruß Andre Zur Info der Quelltext: Proc-Erstellung create procedure [dbo].[sP_Inventurdruck_Bewertung] @BelegNr varchar(15) = Null, @Gruppierung tinyint, -- 1 = Artikelgruppe 1. Stufe; 2 = Artikelgruppe 2. Stufe; 3 = Artikelgruppe 3. Stufe @ArtikelgruppenFilter int = -1, @nurSummen int = 0 as Den Kopf habe ich dann in der Abfrage geändert und die Parameter einfach mit Demo-Werten gefüllt. declare @BelegNr varchar(15) declare @Gruppierung tinyint declare @ArtikelgruppenFilter int declare @nurSummen int set @BelegNr = '000322' set @Gruppierung = 1 set @ArtikelgruppenFilter = -1 set @nurSummen = 0 /* drop table ##tempArtikelGruppenStufen drop table ##tempArtgruppHier */ create table ##tempArtikelGruppenStufen ( Artikelgruppe int, Stufe1 int, Stufe2 int, Stufe3 int ) create table ##tempArtgruppHier ( Zaehler int, Artikelgruppe int) declare @Stufe1 int declare @Stufe2 int declare @Stufe3 int declare @Artikelgruppe int declare @SourceArtikelgruppe int declare @Zaehler int declare myCursor Cursor for select ArtikelgruppeNr from dbo.Artikelgruppen -- where (Artikelnummer like '0.%') for read only open myCursor while (0 = 0) begin Fetch Next from myCursor into @Artikelgruppe if (@@Fetch_Status <> 0) break set @SourceArtikelgruppe = @Artikelgruppe delete from ##tempArtgruppHier if (@Artikelgruppe is null) break set @Zaehler = 1 insert into ##tempArtgruppHier (Zaehler,Artikelgruppe) Values (@Zaehler,@Artikelgruppe) set @Artikelgruppe = (select VorgaengerArtikelgruppe from dbo.Artikelgruppen where (Artikelgruppen.ArtikelgruppeNr = @Artikelgruppe)) while (@Artikelgruppe is not null) and (@Artikelgruppe <> -1) begin set @Zaehler = @Zaehler + 1 insert into ##tempArtgruppHier (Zaehler,Artikelgruppe) Values (@Zaehler,@Artikelgruppe) set @Artikelgruppe = (select VorgaengerArtikelgruppe from dbo.Artikelgruppen where (Artikelgruppen.ArtikelgruppeNr = @Artikelgruppe)) end set @Stufe1 = (select Artikelgruppe from ##tempArtgruppHier where (Zaehler = @Zaehler)) set @Stufe2 = (select Artikelgruppe from ##tempArtgruppHier where (Zaehler = @Zaehler-1)) set @Stufe3 = (select Artikelgruppe from ##tempArtgruppHier where (Zaehler = @Zaehler-2)) insert into ##tempArtikelGruppenStufen (Artikelgruppe,Stufe1,Stufe2,Stufe3) Values (@SourceArtikelgruppe,@Stufe1,@Stufe2,@Stufe3) end close myCursor Deallocate myCursor select @nurSummen as nurSummen, @Gruppierung as Gruppierung, Pos.BelegNr,Pos.Pos_Nr, Artgrupp.Stufe1, Stufe1Tab.Bezeichnung as ArtgruppStufe1, Artgrupp.Stufe2, Stufe2Tab.Bezeichnung as ArtgruppStufe2, Artgrupp.Stufe3, Stufe3Tab.Bezeichnung as ArtgruppStufe3, Pos.Artikelnummer,Pos.Charge, Stamm.Bezeichnung,Stamm.Langtext,Stamm.Laenge,Stamm.Breite, ME2.Bezeichnung as Laenge_ME, ME3.Bezeichnung as Breite_ME, Pos.Menge,ME.Bezeichnung as Menge_ME, Pos.Calc__Menge_in_PreisME, Kopf.Bezeichnung as BelegBezeichnung, Kopf.Beleg_Datum, Pos.Preis, ME1.Bezeichnung as Preis_je,Waehr.KurzBez as Waehrung, Summ.PosWert, GesSumme.PosWert as GesamtWert, Pos.Sollmenge_in_MELAGER, dbo.Func_ME_Umrechnung (Pos.Menge,Pos.Menge_ME,Stamm.MELAGER, Pos.Calc__Laenge_inUmrME,Pos.Calc__Breite_inUmrME,0,0,Pos.Calc__Staerke_inUmrME, Pos.Calc__Stueckjepak_inUmrME,Pos.Calc__PakproPalette_inUmrME,Pos.Calc__Gewicht_inUmrME,0,0,0,0,0,0,0) as Menge_in_MELAGER, Pos.Sollmenge_in_MELAGER-dbo.Func_ME_Umrechnung (Pos.Menge,Pos.Menge_ME,Stamm.MELAGER, Pos.Calc__Laenge_inUmrME,Pos.Calc__Breite_inUmrME,0,0,Pos.Calc__Staerke_inUmrME, Pos.Calc__Stueckjepak_inUmrME,Pos.Calc__PakproPalette_inUmrME,Pos.Calc__Gewicht_inUmrME,0,0,0,0,0,0,0) as Differenz, ME4.Bezeichnung as MELAGERBezeichnung from dbo.Belegpositionen Pos left outer join dbo.Artikelstamm Stamm on Pos.Artikelnummer = Stamm.Artikelnummer inner join dbo.Belegkopf Kopf on Pos.BelegNr = Kopf.BelegNr left outer join dbo.Mengeneinheiten ME on Pos.Menge_ME = ME.ME left outer join dbo.Mengeneinheiten ME1 on Pos.Preis_ME = ME1.ME left outer join dbo.Mengeneinheiten ME2 on Stamm.Laenge_ME = ME2.ME left outer join dbo.Mengeneinheiten ME3 on Stamm.Breite_ME = ME3.ME left outer join dbo.Mengeneinheiten ME4 on Stamm.MELAGER = ME4.ME left outer join dbo.V_Belegsummen1 Summ on (Pos.BelegNr = Summ.Belegnr) and (Pos.Pos_Nr = Summ.Pos_Nr) left outer join dbo.Waehrungen Waehr on (Pos.Waehrung = Waehr.WaehrungsNr) left outer join dbo.V_Belegsummen2 GesSumme on Pos.BelegNr = GesSumme.BelegNr left outer join ##tempArtikelGruppenStufen Artgrupp on Artgrupp.Artikelgruppe = Stamm.Artikelgruppe left outer join dbo.Artikelgruppen Stufe1Tab on Artgrupp.Stufe1 = Stufe1Tab.ArtikelgruppeNr left outer join dbo.Artikelgruppen Stufe2Tab on Artgrupp.Stufe2 = Stufe2Tab.ArtikelgruppeNr left outer join dbo.Artikelgruppen Stufe3Tab on Artgrupp.Stufe3 = Stufe3Tab.ArtikelgruppeNr where ((Pos.BelegNr = @BelegNr) and ((Pos.Menge <> 0) or (Pos.Sollmenge_in_MELAGER <> 0))) and ( (@ArtikelgruppenFilter = -1) or (Stamm.Artikelnummer in (select Artikelnummer from dbo.Artikelgruppenzuordnung where (Artikelgruppe = @ArtikelgruppenFilter )) ) ) order by case when @Gruppierung = 1 then right(coalesce('0000000000'+cast(Artgrupp.Stufe1 as varchar(10)),'0000000000'),10)+ ';;'+Stamm.Artikelnummer when @Gruppierung = 2 then right(coalesce('0000000000'+cast(Artgrupp.Stufe1 as varchar(10)),'0000000000'),10)+';;'+ right(coalesce('0000000000'+cast(Artgrupp.Stufe2 as varchar(10)),'0000000000'),10)+';;'+ Stamm.Artikelnummer when @Gruppierung = 3 then right(coalesce('0000000000'+cast(Artgrupp.Stufe1 as varchar(10)),'0000000000'),10)+';;'+ right(coalesce('0000000000'+cast(Artgrupp.Stufe2 as varchar(10)),'0000000000'),10)+';;'+ right(coalesce('0000000000'+cast(Artgrupp.Stufe3 as varchar(10)),'0000000000'),10)+';;'+ Stamm.Artikelnummer end Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.