Why does this procedure return NULL when count
and sum
are both 0?
x
create procedure avgSalaryByPositions
as
begin
begin try
declare @sum int
select @sum=sum(base_salary) from position
declare @count int
select @count=count(*) from position
select @sum/@count
end try
begin catch
select
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
end catch
end
and does not produce output like this?
create procedure blablabla
as
begin
BEGIN TRY
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
end
GO
exec blablabla
How to change the first procedure to act same as the second one when there is nothing in the table, meaning when sum
and count
are both 0?
Thanks.
Advertisement
Answer
If there is nothing in the table then you have no rows. In that case, the SUM()
returns NULL
, not 0
.
If you want an error to occur, then replace it with a value:
select @sum = coalesce(sum(base_salary), 0) from position;
The count()
will still return 0
, so this should generate an error.
Note that avg()
would be a more sensible way to do the calculation.