Hallo!
> kennt sich hier vielleicht jemand mit dem umgang von cursorvariablen
aus?
> ich habe folgendes problem:
> das ergebnis eines selects
In Transact-SQL ist CURSOR ein Datentyp, der letztendlich ein Recordset
darstellt (�hnlich dem ADO-Recordset bzw. genau das ADO-Recordset, wenn
man einen ServerSide-Cursor haben m�chte), und den man dazu benutzt,
Zwischentabellen zu speichern. Letztendlich ist ein Cursor eine
tempor�re Tabelle im Hauptspeicher.
Einen Cursor braucht man nur dann, wenn man mit Sub-Selects oder sp�t
aufl�senden Sub-Selects nicht hinkommt und die Datenmenge so gering ist,
dass eine echte tempor�re Tabelle sich nicht lohnt, oder wenn man das
Recordset innerhalb einer Stored Procedure zeilenweise bearbeiten
m�chte.
> SELECT Nummer FROM x where y = 'bla' GROUP BY Nummer HAVING
COUNT(Nummer) >
> 1
> ---
> ergibt keinen, einen oder mehrere datens�tze in einem recordset soweit
so
> gut
> nun interessiert aber nicht nur die Spalte Nummer sondern auch andere
> Spalten,
> z.b. farbe ( select Nummer, Farbe...)
> das funktioniert aber so nicht - zumindest kenne ich keine l�sung :-(
> daher nun der versuch mit einem cursor
>
> alles klappt, bis auf die letzte bedingung im where-teil, wenn ich sie
> weglasse
> also nur nach 'bla' suche gehts, aber das ist ja
> nicht das was gewollt ist, es sollen ja genau die datens�tze
herausgefiltert
> werden
> die eben die bedingung des ergebnisses der ersten sql-abfrage erf�llen
> (und diese ergebnisse sollten eigentlich in der variablen @nummer
stehen,
> d.h. bei jedem durchlauf der while schleife einen neue nummer...)
> ---
> ...
> ...
> FETCH NEXT FROM ACursor INTO @nummer, @anzahl
> WHILE @@FETCH_STATUS = 0
> BEGIN
> IF @anzahl > 1
> select Nummer, Farbe from x where y = 'bla' AND Nummer =
@vorgangsnr
> ---
>
> aber vielleicht ist es ja auch mit kanonen auf spatzen gefeuert wenn
ich f�r
> diese l�cherliche doppelfunktion eines sql-sripts einen cursor
bem�he??
In der Tat geht das auch direkt mit einem SQL-Statement:
SELECT Nummer, Farbe
FROM x
WHERE y = 'bla' AND
Nummer IN
(
SELECT Nummer
FROM x
WHERE y = 'bla'
GROUP BY Nummer
HAVING COUNT(Nummer) > 1
)
Damit man nun die Bedingung nicht doppelt schreiben muss (also um mir
UND der Datenbank die Arbeit zu erleichtern), w�rde ich einfach drei
Views schreiben:
1.
SELECT Nummer, Farbe FROM x WHERE y = 'bla'
2.
Select Nummer From View1 Group By Nummer Having count(Nummer) > 1
3.
Select Nummer, Farbe From View1 Where Nummer In View2
Einen Cursor brauchst Du also gar nicht.
Freundliche Gr��e
Joachim van de Bruck
| [aspdedatabase] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp