The THROW statement is available since SQL Server 2012; and combined with the TRY and CATCH blocks, it just makes error handling easier.
create procedure UpdateSales
@SalesPersonID int,
@SalesAmt money = 0
as
begin
begin try
begin transaction;
update LastYearSales
set SalesLastYear = SalesLastYear + @SalesAmt
where SalesPersonID = @SalesPersonID;
commit transaction;
end try
begin catch
if @@TRANCOUNT > 0
begin
rollback transaction
end;
declare @ErrorNumber int = ERROR_NUMBER();
declare @ErrorLine int = ERROR_LINE();
print 'Actual error number: '+CAST(@ErrorNumber as varchar(10));
print 'Actual line number: '+CAST(@ErrorLine as varchar(10));
throw;
end catch;
end;
go