Die Verwendung des DECLARE @local_variable CURSOR
hat noch einen weiteren Vorteil Syntax, die ich gerade entdeckt habe.
Der Vorteil tritt auf, wenn eine gespeicherte Prozedur eine andere aufruft und beide Prozeduren gleichzeitig Cursor geöffnet haben. Wenn DECLARE cursor_name CURSOR
verwendet wird, um die Cursor zu definieren, und beide Prozeduren verwenden denselben Cursor_Namen, dann erhalten Sie
Auf der anderen Seite, wenn DECLARE @local_variable CURSOR
wird verwendet, um die Cursor in den über- und untergeordneten gespeicherten Prozeduren zu definieren, dann @local_variable
ist für jede Prozedur lokal und es gibt keinen Konflikt. Für diejenigen, die diese Methode noch nicht verwendet haben, hier ein Beispiel mit @C
als lokale Variable:
DECLARE @C AS CURSOR;
SET @C = CURSOR FOR SELECT ...;
OPEN @C;
FETCH NEXT FROM @C INTO ...;
...