Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Variablen im Select Statment in Verbindung mit Cursor?

1 view
Skip to first unread message

Peter

unread,
Aug 11, 2004, 11:44:21 AM8/11/04
to
Hallo ich habe folgendes Problem und hoffe ihr könnt mir dabei helfen:

ich benutze zwei Variablen um den Tabelennamen und den Spaltennamen zu
übergeben. Normalerweise ist es ja kein Problem, weil ich erst das
ganze Select Statment in einer Stringvariable bilde und dann mit exec
ausführe... Aber was ist wenn ich dazu auch noch einen Cursor benutzen
will ;-(

Ein Ausschnitt aus der SP:

DECLARE @Table varchar(20),
@Field varchar(20),
@Select varchar(255)
Set @Table = 'DingoAct'
Set @Field = 'SSO'


select @Select = 'select ' +@Field+ ',count(*) from ' +@Table+ ' group
by ' +@Field+ ' having count(*) > 1'
DECLARE TableCursor insensitive cursor for
exec(@select) -- so funktioniert es nicht

/* das soll es in lesbarer Form darstellen */
--select @Field, count(*) from @Table
--group by @Field
--having count(*) > 1

OPEN TableCursor

Olaf Pietsch

unread,
Aug 11, 2004, 1:36:40 PM8/11/04
to
Hallo Peter,


Selektiere mittels cursor die Variablen @Field und @Table zeilenweise.
Je Zeile setze das SELECT zusammen in der cursor Fetch Schleife und führe es
mit exec (...) aus.

Beispiel:

use Northwind
DECLARE @Tab Varchar(100), @sql varchar(1000)

DECLARE cur CURSOR LOCAL FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES

OPEN cur

FETCH NEXT FROM cur INTO @TAB
WHILE @@FETCH_STATUS = 0
BEGIN

SET @sql = 'select count(*) Anzahl From [' + @Tab + ']'
exec (@sql)

FETCH NEXT FROM cur INTO @TAB
END

CLOSE cur
DEALLOCATE cur


Gruß Olaf

Frank Kalis

unread,
Aug 11, 2004, 3:21:02 PM8/11/04
to
Im Zusammenhang mit Olaf's Antwort ist dies vielleicht nocht interessant für
Dich
http://www.insidesql.de/content/view/164/29/#cursor
--
--Frank
http://www.insidesql.de

Peter

unread,
Aug 12, 2004, 5:54:32 AM8/12/04
to
"Frank Kalis" <nos...@insidesql.de> wrote in message news:<D6D39E6C-63B2-457F...@microsoft.com>...
> Im Zusammenhang mit Olaf's Antwort ist dies vielleicht nocht interessant für
> > Hallo ich habe folgendes Problem und hoffe ihr könnt mir dabei helfen:

> >
> > ich benutze zwei Variablen um den Tabelennamen und den Spaltennamen zu
> > übergeben. Normalerweise ist es ja kein Problem, weil ich erst das

> > ganze Select Statment in einer Stringvariable bilde und dann mit exec
> > ausführe... Aber was ist wenn ich dazu auch noch einen Cursor benutzen

> > will ;-(
> >
> > Ein Ausschnitt aus der SP:
> >
> > DECLARE @Table varchar(20),
> > @Field varchar(20),
> > @Select varchar(255)
> > Set @Table = 'DingoAct'
> > Set @Field = 'SSO'
> >
> >
> > select @Select = 'select ' +@Field+ ',count(*) from ' +@Table+ ' group
> > by ' +@Field+ ' having count(*) > 1'
> > DECLARE TableCursor insensitive cursor for
> > exec(@select) -- so funktioniert es nicht
> >
> > /* das soll es in lesbarer Form darstellen */
> > --select @Field, count(*) from @Table
> > --group by @Field
> > --having count(*) > 1
> >
> > OPEN TableCursor
> >

Klasse danke, hat wunderbar funktioniert!

Ich wusste ich kann mich auf euch verlassen ;-) Ich wäre nie auf so
eine "leichte" Lösung gekommen... Sobald man sich in ein Problem
verstrikt denkt man immer kompliziert.

Nochmals danke, auch für die schnelle Antwort

bis dann
Peter

0 new messages