Übersetzung nach T-SQL / Summen im Tree berechnen

20/01/2010 - 10:35 von Tamara Mikes | Report spam
Hallo alle zusammen

Von einem Freund habe ich ein SQL Skript bekommen welches mir eine Summe in
einem Tree bilden soll. Die Syntax basiert vermutlich nicht auf T-SQL
sondern einem anderen Dialekt. Nun bin ich am Versuch, das Script auf T-SQL
umzuschreiben, schaffe es aber nicht ganz.

Die Funktion kurz: In der Tabelle tblFinanzCache soll die Summe von der
Spalte EffSum berechnet werden, wenn die TreeNr mit der ParentID aus der
Tabelle tblGruppe übereinstimmt.


Kann mir jemand sagen wo ich bei der Fehlermeldung "Incorect Syntax near C1"
eingreffen muss?



Das hier, ist das original welches ich bekommen habe:


DECLARE
CURSOR c1 IS
SELECT grpParent, grpID
FROM tblGruppen
ORDER BY grpParent ASCENDING
grpID DESCENDING

BEGIN
OPEN c1
LOOP
FETCH c1
EXIT WHEN c1.NOTFOUND




Und hier habe ich angefangen zu korrigieren


/* Anpassung gemàss: */
/* - MSDN: http://msdn.microsoft.com/de-de/lib...80169.aspx */
/* - Wikipedia: http://en.wikipedia.org/wiki/Transact-SQL */

DECLARE c1 CURSOR
FOR SELECT grpParent, grpID
FROM tblGruppen
ORDER BY grpParent ASC,
grpID DESC

BEGIN
OPEN c1
LOOP
FETCH NEXT FROM c1
EXIT WHEN c1.NOTFOUND

UPDATE tblFinanzCache
set EffNeuberLast = getdate(),
EffNeuberNeed = 0,
KnotenTyp='grpSum',
EffSum =(SELECT Sum(fc.EffSum) AS Wert FROM tblFinanzCache fc /*Summe
ermitteln*/
WHERE fc.TreeNr IN /*Summierungsbedingung*/
(SELECT grpID FROM tblGruppen
WHERE grpParent = c1.grpID))
WHERE EffNeuberNeed = 1 AND TreeNr = c1.grpParent

END LOOP
CLOSE c1
END

DEALLOCATE c1 /*Bitzeli ufrume*/




Vielen lieben Dank für jegliche Hinweise
Gruss Tamara
 

Lesen sie die antworten

#1 Uwe Ricken
20/01/2010 - 11:10 | Warnen spam
Hallo Tamara,

einen Cursor durchlàufst Du in T-SQL etwas anders.
Basierend auf dem Code wie folgt:

DECLARE
CURSOR c1 IS
SELECT grpParent, grpID
FROM tblGruppen
ORDER BY grpParent ASCENDING
grpID DESCENDING

BEGIN
OPEN c1
LOOP
FETCH c1
EXIT WHEN c1.NOTFOUND




DECLARE @grpId int
DECLARE c1 CURSOR
FOR
SELECT grpId
FROM dbo.tblGruppen
ORDER BY grpParent, ASC, grpId DESC

OPEN c1

FETCH NEXT FROM c1 INTO @grpId
WHILE (@@FETCH_STATUS <> -1)
BEGIN
SELECT @grpId
FETCH NEXT FROM c1 INTO @grpId
END

CLOSE c
DEALLOCATE c

Versuche mal den Ansatz - hilft sicherlich weiter ;-)

Uwe Ricken
db Berater GmbH
http://www.db-berater.de

MCTS: Microsoft SQL Server 2005
MCDBA: Microsoft SQL Server 2005

Ähnliche fragen