я иметь следующую хранимую процедуру для проверки видимости переменныхПочему переменные области видимости существуют за пределами блока?
alter proc updatePrereq
@pcntr int,
@pmax int
as
begin
if @pcntr = 1
begin
declare @i int
set @i= @pcntr
end
set @[email protected]
select @i;
end
go
В приведенном выше @i скрипта объявить в блоке, если только тогда, когда значение @pcntr равно 1. Предположим, выше хранимая процедура называется 5 раз из этого сценария
declare @z int
set @z = 1
declare @max int
set @max = 5
while @z <= @max
begin
exec dbo.updatePrereq @z, @max
set @z = @z + 1
end
go
Как я уже говорил ранее @i
переменная существует только тогда, когда @pcntr
является 1
. Поэтому, когда я вызываю хранимую процедуру во второй раз и т. Д., Элемент управления не может войти в блок if, поэтому переменная @i даже не существует. Но сценарий печатает значение в @i
на каждой итерации. Как это возможно, если он выкинет ошибку, так как переменная @i
не существует, если значения @pcntr
больше, чем 1
?
here is video showing this issues благодарит
в обоих случаях дает те же результаты. Но в моем случае он должен печатать «1» и должен вызывать ошибку для других итераций, не так ли? Но это не так! –
должно быть, но оно не выдавало ошибку! вот почему я разместил это! позвольте мне поставить видео youtube в секунду –
Я обновил сообщение с видео –