Ive प्रक्रिया का पालन करें:एसक्यूएल सर्वर पकड़ने अपवाद और जारी रखने के
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 अपने आवेदन के लिए एक अपवाद और कोड यदि अंदर फेंकता स्थिति निष्पादित नहीं की जाएगी।
कोई भी विचार?
आप @@ पहचान का उपयोग नहीं करना चाहते हैं, यह एक असुरक्षित कमांड है जो आपके डेटाटाइटीटी के साथ गड़बड़ करेगा यदि आप कभी भी टेबल पर ट्रिगर्स जोड़ते हैं जो अन्य तालिकाओं में डालें। इसके बजाय OUTPUT या scope_identity() का उपयोग करें। – HLGEM
@@ पहचान के साथ क्या समस्या है? और मैं OUTPUT का उपयोग कैसे करूं? – ozsenegal
@@ पहचान आपको अंतिम पहचान मूल्य उत्पन्न करती है, जो आवश्यक रूप से पहचान मूल्य नहीं है। यदि आपके पास tb_cidades पर ट्रिगर है जो किसी इतिहास/लॉग तालिका में सम्मिलित होता है और उसके पास एक पहचान कॉलम है, तो आपको उस पहचान मान मिलते हैं, न कि tb_cidades तालिका के लिए उत्पन्न पहचान मान। SCOPE_IDENTITY() का उपयोग करके आपको अपने वर्तमान "स्कोप" के भीतर उत्पन्न पहचान मान मिलता है, जो tb_cidades पर होगा। –