There is another advantage to using the DECLARE @local_variable CURSOR
syntax that I just discovered.
The advantage occurs when one stored procedure calls another, and both procedures have cursors open at the same time. If DECLARE cursor_name CURSOR
is used to define the cursors, and both procedures use the same cursor_name, then you get
Msg 16915: A cursor with the name 'cursor_name' already exists.
On the other hand, If DECLARE @local_variable CURSOR
is used to define the cursors in the parent and child stored procedures, then @local_variable
is local to each procedure and there is no conflict. For those who haven't used this method before, here is an example, using @C
as the local variable:
DECLARE @C AS CURSOR;
SET @C = CURSOR FOR SELECT ...;
OPEN @C;
FETCH NEXT FROM @C INTO ...;
...
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…