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