изоляция области видимости - PullRequest
0 голосов
/ 24 октября 2019
CREATE PROCEDURE myproc
AS
BEGIN

BEGIN
  DECLARE @d int;
END
BEGIN
  DECLARE @d int;
END

END

Не разбирается с ошибкой 134. Как получить изоляцию области? НАЧАЛО ... КОНЕЦ не обеспечивает это. Ищем эквивалент {} в C или C ++. Подробности сообщения об ошибке: сообщение 134, уровень 15, состояние 1.

1 Ответ

1 голос
/ 25 октября 2019

Как предлагают все в комментариях: область действия переменной длится с момента ее объявления до конца хранимой процедуры. Он не может быть изолирован. Вы можете объявить это в начале процедуры и установить значения по-разному, однако и всякий раз, когда это необходимо.

Однако, если вы действительно хотите это сделать, вы можете использовать динамический sql в качестве обходного пути (хотя это не рекомендуется):

CREATE or alter PROCEDURE myproc
AS
BEGIN

BEGIN
  exec sp_executesql N'DECLARE @d int; set  @d = 50;select @d';
END
BEGIN
  exec sp_executesql N'DECLARE @d int; set  @d = 500;select @d';
END

END;

Когда вы выполните вышеописанную процедуру, вы получите 50 и 500 в качестве вывода.

...