Scope
Variables that are declared within a begin … end
block are visible outside that block:
declare @flag varchar(10) = 'yes';
if @flag = 'yes' begin
declare @var_yes varchar(10) = 'tq84 yes';
end
else begin
declare @var_no varchar(10) = 'tq84 no';
end;
print 'var_yes = ' + coalesce(@var_yes, 'n/a');
print 'var_no = ' + coalesce(@var_no , 'n/a');
However, the scope of a variable ends with a
go
.
Declare and assign a select statement's result
It's possible to declare a variable and assign the result of a
select statement in one go:
set nocount on
create table tq84_some_values (val integer);
insert into tq84_some_values values (11);
insert into tq84_some_values values ( 5);
insert into tq84_some_values values (42);
insert into tq84_some_values values (31);
insert into tq84_some_values values (27);
--
-- declare a variable and assign a value from
-- a select statement:
--
declare @min_val integer = (select min(val) from tq84_some_values);
print('min_val = ' + str(@min_val));
drop table tq84_some_values ;