我遵循程序:
alter procedure sp_insert_cities
(
@txt_nome_cidade varchar(300),
@txt_nome_estado varchar(150) = null,
@txt_pais varchar(150) = null,
@int_id_cidade int output
)
as
begin
//Here an exception may occur
insert into tb_cidades values(
@txt_nome_cidade,
@txt_nome_estado,
@txt_pais)
set @int_id_cidade = @@identity
//Here i want to catch exception and continue executing the proc
if(@@error <> 0)
begin
select @int_id_cidade = int_id_cidade
from tb_cidades
where
txt_nome_cidade = @txt_nome_cidade
end
在if(@@error <> 0)
行后,我想继续执行代码,即使有任何错误,但SQL会向我的应用程序抛出异常,并且IF条件内的代码将不会执行。
有什么想法吗?
答案 0 :(得分:7)
BEGIN TRY
insert into tb_cidades values(
@txt_nome_cidade,
@txt_nome_estado,
@txt_pais)
set @int_id_cidade = @@identity
END TRY
BEGIN CATCH
select @int_id_cidade = int_id_cidade
from tb_cidades
where
txt_nome_cidade = @txt_nome_cidade
END CATCH
答案 1 :(得分:0)
以下内容将尝试运行您的命令。您可以在CATCH块中放置要运行的任何内容,只有在发生错误时才会执行。 CATCH之后的剩余代码将运行错误或没有错误。
BEGIN TRY
insert into tb_cidades values(
@txt_nome_cidade,
@txt_nome_estado,
@txt_pais)
set @int_id_cidade = @@identity
END TRY
BEGIN CATCH
PRINT 'Error occurred'
END CATCH
if(@@error <> 0)
begin
select @int_id_cidade = int_id_cidade
from tb_cidades
where
txt_nome_cidade = @txt_nome_cidade
end