aswathy.s.88 Ответов: 3

Оператор GOTO в Sql Server


Привет,

У меня есть некоторые сомнения в заявлении GOTO в SqlServer.
DECLARE	@a	Int
DECLARE	@b	Int
SELECT	@a	=	10
SELECT	@b	=	5
BEGIN
	IF		@a>@b GOTO	Greater
	IF		@a<@b GOTO	Lesser
END
Greater:	SELECT	@a
Lesser:		SELECT	@b


При выполнении этих операторов я получаю обе метки выполненными. Я полагаю, чтобы получить значение только "@a".


А ниже фрагмент кода, который я получил от MSDN.
Но я не понимаю, почему метка "Branch_Two:" не выполняется... Я в замешательстве....


DECLARE @Counter int;
SET @Counter = 1;
WHILE @Counter < 10
BEGIN 
    SELECT @Counter
    SET @Counter = @Counter + 1
    IF @Counter = 3 GOTO Branch_One  --Jumps to the first branch.
    IF @Counter = 4 GOTO Branch_Two  --This will never execute.
END
Branch_One:
    SELECT 'Jumping To Branch One.'
    GOTO Branch_Three; --This will prevent Branch_Two from executing.
Branch_Two:
    SELECT 'Jumping To Branch Two.'
Branch_Three:
    SELECT 'Jumping To Branch Three.'



Заранее спасибо

3 Ответов

Рейтинг:
2

sachin10d

Попробовать это

DECLARE	@a	Int
DECLARE	@b	Int
SELECT	@a	=	10
SELECT	@b	=	5
BEGIN
	IF		@a>@b GOTO	Greater
	IF		@a<@b GOTO	Lesser
END
Greater:	SELECT	@a
			GOTO Last;
Lesser:		SELECT	@b
			GOTO Last;
Last:


Вот последние работы как перерыв; заявление в C#
Перейти к последнему; не добавляется он будет выполняться в незначительной степени

таким образом, вы получаете оба выхода
выше изменение работает нормально

Дайте мне знать, если у вас есть какие-либо засухи

Вы можете сделать это обоими способами, как это сделал кишорекке, или как в приведенном выше сценарии


Рейтинг:
0

P.Salini

Прочтите это, это даст вам некоторое представление.
http://blog.sqlauthority.com/2007/05/07/sql-server-20052000-examples-and-explanation-for-goto/[^]

В первом фрагменте кода значение a равно > b so GOTO Greater это исполняется.
так Greater: SELECT @a это будет исполнено. после этого выполняется следующая строка, которая является Lesser: SELECT @b .
поскольку отсутствует заявление для возврата после выполнения кода в метке больше, на этикетке меньшей будет выполняться.

Во втором фрагменте кода, когда @Counter тогда становится 3
IF @Counter = 3 GOTO Branch_One выполняется, и курсор выходит из цикла while.
под этикеткой branch one эти 2 утверждения существуют

SELECT 'Jumping To Branch One.'<br />
    GOTO Branch_Three;<br />


в приведенном выше коде после выбора, GOTO Branch_Three; оператор есть, поэтому курсор будет выполнять операторы под меткой branch_three
после окончания выполнения этикетки branch_three
нет никакого заявления, которое нужно выполнить.
как курсор вышел из цикла while branch_Two никогда не будет казнен.

Надеюсь, вы меня поняли.


aswathy.s.88

Да, я уже заходил на эту страницу. Но я ничего не понял из этой статьи. Именно поэтому я обратился за помощью к экспертам проекта Code...

Рейтинг:
0

kishorekke

Проверьте ниже

DECLARE @a  Int
DECLARE @b  Int
SELECT  @a  =   10
SELECT  @b  =   5
BEGIN
    IF      @a>@b GOTO  Greater
    ELSE IF     @a<@b GOTO  Lesser
END
Greater:    SELECT  @a  return
Lesser:     SELECT  @b return


sachin10d

Изменил строку elseif и теперь она работает нормально