Asuming the error have a text simil to (restriction between quote):
Infracción de la restricción UNIQUE KEY 'CIF duplicado no admitido'. No se puede insertar una clave duplicada en el objeto 'dbo.GASTOS_Proveedores'. El valor de la clave duplicada es (asd).
you can find first and second quote and extract the message:
CIF duplicado no admitido
create function GetRestictionError(@MensajeError nvarchar(255)) returns nvarchar(255) as begin declare @Msg nvarchar(255) set @Msg = @MensajeError declare @PrimCom int declare @SecondCom int --asci 39+ ' set @PrimCom = charindex(char(39),@MensajeError) if @PrimCom > 0 begin set @SecondCom = charindex(char(39),@MensajeError+1, @Primcom + 1) if @SecondCom > 0 set @Msg = SUBSTRING(@mensajeerror,@primcom+1,@secondcom - @primcom - 1) end return @Msg end
and then, use when you need. Sample:
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; */ declare @Titulo nvarchar(255) set @Titulo = dbo.GetRestictionError(ERROR_MESSAGE()) if @Titulo = '' set @Titulo = 'Error al guardar' select 0 as Respuesta, ERROR_MESSAGE() as Registro, @Titulo as titulo -- ERROR_PROCEDURE () as Titulo end catch
SELECT ... FROM table (WITH UPDLOCK)queries to check if username or phone number exists. Then do yourINSERTorUPDATEcommand. No updates can occur on the table until you commit the transaction.