显示 null 而不是通过 try-catch 抛出除零错误
Showing null instead of throwing a zero division error by try-catch
为什么当 count
和 sum
都为 0 时此过程 return NULL?
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
并且不会产生这样的输出?
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
当 table 中没有任何内容时,如何将第一个过程更改为与第二个过程相同,意思是当 sum
和 count
均为 0 时?
谢谢。
如果 table 中没有任何内容,那么您就没有 行 。在那种情况下,SUM()
returns NULL
,而不是 0
.
如果您希望发生错误,请将其替换为一个值:
select @sum = coalesce(sum(base_salary), 0) from position;
count()
仍然会 return 0
,所以这应该会产生错误。
请注意,avg()
是一种更明智的计算方式。
为什么当 count
和 sum
都为 0 时此过程 return NULL?
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
并且不会产生这样的输出?
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
当 table 中没有任何内容时,如何将第一个过程更改为与第二个过程相同,意思是当 sum
和 count
均为 0 时?
谢谢。
如果 table 中没有任何内容,那么您就没有 行 。在那种情况下,SUM()
returns NULL
,而不是 0
.
如果您希望发生错误,请将其替换为一个值:
select @sum = coalesce(sum(base_salary), 0) from position;
count()
仍然会 return 0
,所以这应该会产生错误。
请注意,avg()
是一种更明智的计算方式。