Pongo mi solución: los comentarios son casos que ROMPEN el trigger
CREATE TABLE transferencias(
id_trans INT IDENTITY(1,1),
cuenta INT NOT NULL,
direccion CHAR(1),
fecha datetime,
importe numeric(12,2),
PRIMARY KEY(id_trans),
CHECK(direccion = 'E' OR direccion = 'S')
)
CREATE TABLE relacion(
inquilino INT,
dueño INT
)
GO
CREATE TRIGGER noPerderComision ON transferencias
AFTER INSERT, UPDATE
AS
DECLARE C CURSOR FOR
SELECT * FROM inserted
DECLARE @id_trans INT,
@cuenta INT,
@inquilino INT,
@dueño INT,
@direccion CHAR(1),
@fecha datetime,
@importe numeric(12,2),
@importeInserted numeric(12,2);
OPEN C
FETCH C INTO @id_trans, @cuenta, @direccion, @fecha, @importe
WHILE(@@FETCH_STATUS = 0)
BEGIN
IF(@direccion = 'S')
BEGIN
SET @inquilino = (SELECT relacion.inquilino FROM relacion WHERE relacion.dueño = @cuenta)
SET @importeInserted = (SELECT transferencias.importe FROM transferencias WHERE transferencias.cuenta = @inquilino
AND YEAR(transferencias.fecha) = YEAR(@fecha) AND MONTH(transferencias.fecha) = MONTH(@fecha))
IF(@importe >= @importeInserted)
BEGIN
PRINT('ESTAS PERDIENDO PLATA, SALIDA')
PRINT('Cobraste $' + STR(@importeInserted))
PRINT('y enviaste $' + STR(@importe))
ROLLBACK
END
END
IF(@direccion = 'E')
BEGIN
SET @dueño = (SELECT relacion.dueño FROM relacion WHERE relacion.inquilino = @cuenta)
SET @importeInserted = (SELECT transferencias.importe FROM transferencias WHERE transferencias.cuenta = @dueño
AND YEAR(transferencias.fecha) = YEAR(@fecha) AND MONTH(transferencias.fecha) = MONTH(@fecha))
IF(@importe <= @importeInserted)
BEGIN
PRINT('ESTAS PERDIENDO PLATA, ENTRADA')
PRINT('Cobraste $' + STR(@importe))
PRINT('y enviaste $' + STR(@importeInserted))
ROLLBACK
END
END
FETCH C INTO @id_trans, @cuenta, @direccion, @fecha, @importe
END
CLOSE C
DEALLOCATE C
GO
INSERT INTO transferencias (cuenta,direccion,fecha,importe) VALUES
(1, 'E', '2011-09-01', 100), (1, 'E', '2011-10-01', 150), (1, 'E', '2011-11-01', 200),
(3, 'S', '2011-09-02', 90),
(2, 'E', '2011-09-01', 300), (2, 'E', '2011-10-01', 400), (2, 'E', '2011-11-01', 500),
(4, 'S', '2011-09-02', 270), (4, 'S', '2011-10-02', 360), (4, 'S', '2011-11-01', 450);
INSERT INTO relacion (inquilino, dueño) VALUES
(1, 3), (2, 4);
--select * from transferencias
--select * from relacion
SELECT t1.cuenta, t1.importe, t1.fecha, t1.direccion, relacion.dueño
FROM transferencias t1 INNER JOIN relacion ON relacion.inquilino = t1.cuenta
WHERE t1.direccion = 'E' AND (
select count(*)
from transferencias t2
where t2.direccion = 'S' AND t2.cuenta = relacion.dueño
AND MONTH(t1.fecha) = MONTH (t2.fecha)
AND YEAR(t1.fecha) = YEAR(t2.fecha)) <> 1
--INSERT INTO transferencias (cuenta,direccion,fecha,importe) VALUES (3, 'S', '2011-10-01', 150)
--UPDATE transferencias SET importe = 199 WHERE id_trans = 4
--UPDATE transferencias SET importe = 12 WHERE id_trans = 1
DROP TRIGGER noPerderComision
DROP TABLE relacion
DROP TABLE transferencias
Ya sé, el PRINT es FEO XD... es a modo de que quede claro cuando probaba