Hola a todos,les explico:
Tengo el siguiente procedimiento almacenado para insertar un cliente
Código:
ALTER PROCEDURE dbo.AltaCliente
@Dni_Insertado char(9) OUT,
@Dni char(9),
@Nombre varchar(20),
@Apellido1 varchar(50),
@Apellido2 varchar(50),
@Direccion varchar(50),
@Telefono char(9),
@Movil char(9)
AS
INSERT INTO dbo.Cliente (Dni,Nombre,Apellido1,Apellido2,Direccion,Telefono,Movil)
VALUES (@Dni,@Nombre,@Apellido1,@Apellido2,@Direccion,@Telefono,@Movil);
SELECT @Dni_Insertado=dni FROM dbo.Cliente WHERE dni=@Dni;
Y por otro lado este trigger que me comprueba que el dni del cliente que voy insertar no estea ya en la bbdd
Código:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [trigger_AltaCliente]
ON [dbo].[Cliente]
FOR INSERT
AS
Declare @num int
SELECT @num=COUNT(i.dni) FROM inserted i INNER JOIN dbo.Cliente c
ON c.dni = i.dni
if(@num = 1)
begin
ROLLBACK TRANSACTION
end
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
END
Al llamar al procedimiento almacenado desde codigo C# se dispara el trigger y si no existe un dni igual en la bbdd inserta el cliente correctamente.El problema me viene cuando existe un dni igual en la bbdd entonces el trigger tendria que deshacer la accion con rollback,pero esto me da un error.Por que??