Hallo zusammen,
ich bin dabei eine Stored Procedure zu schreiben. Ich habe schon mehrere Ähnliche fertig. Aber hier stoße ich an Problem und ich weiß noch nicht mal, wie ich die Frage als Google Suche formulieren soll. Am einfachsten deshalb hier der komplette Code bis jetzt:
Im Code gibt es einen Kommentar der mit "Hier beginnt das Problem ..." beginnt.
Hat jemand eine Idee, wie der Code für diese "Unterschleife" richtig eingegeben werden muss?
Und der Code ist am Ende noch nicht fertig. Als Ergebnis soll die komplette @tmpTabelle3 ausgegeben werden. Das ist aber nicht das Problem.
Vielen Dank für eure Hilfe
Michael
ich bin dabei eine Stored Procedure zu schreiben. Ich habe schon mehrere Ähnliche fertig. Aber hier stoße ich an Problem und ich weiß noch nicht mal, wie ich die Frage als Google Suche formulieren soll. Am einfachsten deshalb hier der komplette Code bis jetzt:
Code:
CREATE PROCEDURE [dbo].[P_OFB_SuSaDate]
-- Add the parameters for the stored procedure here
@Mandant numeric(4,0) = NULL,
@datumBereich char(255) = Null,
@ProjBereich char(255) = ''
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
declare @Proj_von char(20)
declare @Proj_bis char(20)
declare @datum date
declare @datumVon date
DECLARE @param2 XML
-- Bei den Bereichsangaben '-' wie '..' behandeln
set @datumBereich = REPLACE(@datumBereich, '-', '..')
set @ProjBereich = REPLACE(@ProjBereich, '-', '..')
select @param2 = CAST('<i>' + REPLACE(@ProjBereich,'|','</i><i>') + '</i>' AS XML) -- Projektbereich in XML-Datei überführen mit | als Satztrenner
-- Auflösen des Datumsbereiches
if @datumBereich is null Begin
set @datum = getdate();
set @datumVon = Null;
end else if charindex('..', @datumBereich) > 0 Begin -- es ist ein Bereich angegeben worden
if charindex('..', @datumBereich) = len(@datumBereich) - 1 Begin -- der Bereich geht bis aktuell <Datum>..
set @datumVon = cast(SUBSTRING(@datumBereich, 0, CHARINDEX('..', @datumBereich)) as date);
set @datum = Null;
end else Begin -- der Bereich hat einen Anfang und ein Ende oder er beginnt beim erst möglichen Datensatz
set @datumVon = cast(SUBSTRING(@datumBereich, 0, CHARINDEX('..', @datumBereich)) as date);
set @datum = cast(SUBSTRING(@datumBereich, charindex('..', @datumBereich)+2,len(@datumBereich) - CHARINDEX('..', @datumBereich)-1) as date);
end
end else Begin -- es ist kein Bereich angegeben worden
set @datum = cast(@datumBereich as Date);
set @datumVon = Null;
end
-- Auflösen des Projektbereiches
declare @tmpTabelle Table (Proj nvarchar(44));
insert into @tmpTabelle
SELECT -- die einzelnen Projektbereiche aus der XML-Datei in Datensätze überführen
x.i.value('.','NVARCHAR(20)') as Proj
FROM @param2.nodes('//i') x(i);
Declare @tmpTabelle3 Table (Konto nvarchar(44), Kontobezeichnung varchar(60), Saldo float)
insert into @tmpTabelle3
select
k.sk_konto,
k.bezeichng,
( -- Hier beginnt das Problem, dies soll quasi eine Schleife sein, die für jeden Datensatz von ktot durchlaufen werden soll und als Ergebnis das Feld Saldo aus @tmpTabelle3 füllt.
Declare @tmpTabelle2 Table (Konto nvarchar(44), Proj nvarchar(44), Proj_von char(20), Proj_bis char(20), Saldo float);
insert into @tmpTabelle2 -- alle möglichen Kombinationen mit den weiteren Angaben ergänzen (Saldo und Steuersaldo sind zunächst noch NULL)
select
Proj,
case
when CHARINDEX('..', Proj) > 0 Then --Proj_von
SUBSTRING(Proj, 0, CHARINDEX('..', Proj))
else
Proj
end,
case --Proj_bis
when CHARINDEX('..', Proj) = 0 Then
Proj
when CHARINDEX('..', Proj)+1 = len(Proj) Then
'..'
else
SUBSTRING(Proj, CHARINDEX('..', Proj)+2, len(Proj) - CHARINDEX('..', Proj)-1)
end,
null -- Saldo
from @tmpTabelle;
update @tmpTabelle2 -- zu jedem Kontobereich den Saldo hinzufügen
set Saldo = dbo.fct_OFB_SkljSaldoDate(@Mandant, k.sk_konto, @datum, @datumVon, k.sk_Konto, Proj_von, Proj_bis, 'S', null)
from @tmpTabelle2
select sum(Saldo) as Saldo -- Summe über alle Kontobereiche zurückgeben
from @tmpTabelle2
)
from ktot k
END
Im Code gibt es einen Kommentar der mit "Hier beginnt das Problem ..." beginnt.
Hat jemand eine Idee, wie der Code für diese "Unterschleife" richtig eingegeben werden muss?
Und der Code ist am Ende noch nicht fertig. Als Ergebnis soll die komplette @tmpTabelle3 ausgegeben werden. Das ist aber nicht das Problem.
Vielen Dank für eure Hilfe
Michael