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

Antwort per Email an