Goto

Tengo un problema con el goto.
Nunca lo he usado y necesito hacer una subrutina dentro de un procedimiento. La subrutina se ejecuta 1 sola vez, el programa no continua. Hay un problema con el uso del return?
Gracias por tu respuesta

1 Respuesta

Respuesta
1
Toda la ejecución sigue hacia donde le indicas, es decir, hacia la etiqueta y de ahí en adelante, no regresa a menos que lo indiques:
GOTO
Altera el flujo de ejecución y lo dirige a una etiqueta. Las instrucciones Transact-SQL que siguen a una instrucción GOTO se pasan por alto y el procesamiento continúa en el punto que marca la etiqueta. Las instrucciones GOTO y las etiquetas se pueden utilizar en cualquier punto de un procedimiento, lote o bloque de instrucciones. Las instrucciones GOTO se pueden anidar.
Sintaxis
Definición de la etiqueta:
Label :
Alteración de la ejecución:
GOTO label
Argumentos
Label
Es el punto a continuación del cual comienza el procesamiento cuando una instrucción GOTO especifica esa etiqueta. Las etiquetas se deben ajustar a las normas de los identificadores. Las etiquetas se pueden utilizar como comentarios, tanto si se usa GOTO como si no.
Observaciones
GOTO puede aparecer dentro de las instrucciones de control de flujo condicional, en bloques de instrucciones o en procedimientos, pero no se puede dirigir a una etiqueta externa al lote. La ramificación con GOTO se puede dirigir a una etiqueta definida antes o después de la instrucción GOTO.
Permisos
Los permisos para utilizar GOTO pertenecen de manera predeterminada a cualquier usuario válido.
Ejemplos
Este ejemplo muestra un bucle con GOTO como alternativa al uso de WHILE.
Nota El cursor tnames_cursor no está definido. Este ejemplo sólo tiene propósitos ilustrativos.
USE pubs
GO
DECLARE @tablename sysname
SET @tablename = N'authors'
table_loop:
IF (@@FETCH_STATUS <> -2)
BEGIN
SELECT @tablename = RTRIM(UPPER(@tablename))
EXEC ("SELECT """ + @tablename + """ = COUNT(*) FROM "
+ @tablename )
PRINT " "
END
FETCH NEXT FROM tnames_cursor INTO @tablename
IF (@@FETCH_STATUS <> -1) GOTO table_loop
GO
Véase también
BEGIN...END
BREAK
CONTINUE
Lenguaje de control de flujo
IF...ELSE
WAITFOR
Utilizar identificadores
WHILE
©1988-2000 Microsoft Corporation. Reservados todos los derechos.
Utilizar GOTO
La instrucción GOTO provoca que, en la ejecución de un lote de Transact-SQL, se salte a una etiqueta. Ninguna de las instrucciones situadas entre la instrucción GOTO y la etiqueta se ejecutarán. El nombre de la etiqueta se define con la sintaxis:
label_name:
No abuse de la utilización de la instrucción GOTO. Una utilización excesiva de esta instrucción puede hacer que resulte difícil entender la lógica de un lote de Transact-SQL. La lógica desarrollada con GOTO casi siempre se puede implementar con las instrucciones de control de flujo. La mejor utilización de GOTO se produce cuando se necesita romper la anidación profunda de instrucciones de control de flujo.
La etiqueta que constituye el objetivo de un GOTO sólo identifica el destino del salto. No hace nada para aislar las instrucciones que le siguen de las instrucciones que le preceden. Cualquier usuario que ejecute las instrucciones situadas justo antes de la etiqueta se la saltará y ejecutará las instrucciones posteriores a la misma. Esto ocurrirá a menos que la instrucción que precede a la etiqueta sea a su vez una instrucción de control de flujo como, por ejemplo, RETURN.
Esto es un ejemplo de un GOTO:
IF (SELECT SYSTEM_USER()) = 'payroll'
GOTO calculate_salary
-- Other program code would appear here.
-- When the IF statement evaluates to TRUE, the statements
-- between the GOTO and the calculate_salary label are
-- ignored. When the IF statement evaluates to FALSE the
-- statements following the GOTO are executed.
calculate_salary:
-- Statements to calculate a salary would appear after the label.
Véase también
GOTO
©1988-2000 Microsoft Corporation. Reservados todos los derechos.
Si quieres manejar subrutinas o procedimientos anidados, sugiero que lo hagas en otro stored procedure y lo llames dentro del primero y así como los vayas requiriendo, de esta forma si recibes los returns.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas