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
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
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