Trigger instide of Insert ... no funciona

07/03/2010 - 21:50 por Bartolomé Genovard | Informe spam
HOla

como en mi tabla tengo uncampo calculado, he creado un trigger para
que me modifique el insert y excluya el campo calculado y el ID.

El trigger es:

create TRIGGER [dbo].[mi_trigger] ON [dbo].[t_tabla1]
INSTEAD OF INSERT
AS
BEGIN

insert into t_tabla1 (campo1, campo2, campo3)
Select campo1, campo2, campo3
FROM inserted
END

si hago un insert sql incluyendo en la sentencia insert el campo
calculado y el id, me salta el error...

Msg 271, Level 16, State 1, Line 5
The column "cc_grupo" cannot be modified because it is either a
computed column or is the result of a UNION operator.

no entiendo nada

¿como puedo ver si realmente se dispara el trigger?

gracias
 

Leer las respuestas

#1 Alejandro Mesa
08/03/2010 - 00:10 | Informe spam
Bartolomé Genovard,

Existen chequeos de metadata y restricciones que se hacen antes de que algun
trigger sea ejecutado. En esos casos tenemos referencia a una columna
calculada en la sentencia insert, referencia a una columna identity en la
sentencia insert, si no esta encendida la opcion "identity_insert". Lo mismo
pasa si la opcion "identity_insert" esta prendida pero no se hace una
referencia explicita a la columna identity en la sentencia insert.

Tu trigger "instead of" ha de funcionar ok si la sentencia que lo dispara
esta correcta, que en este caso seria no referenciar a la columna identity ni
la calculada.

Ejemplo:


USE tempdb;
GO
CREATE TABLE dbo.T (
c1 int NOT NULL IDENTITY(1, 1),
c2 AS (c1 % 3),
c3 char(1) NULL
);
GO
CREATE TRIGGER dbo.tr_T_io_Ins ON dbo.T
INSTEAD OF INSERT
AS
IF @@rowcount = 0
RETURN;

INSERT INTO dbo.T(c3)
SELECT c3
FROM INSERTED;
GO
INSERT INTO dbo.T (c3) VALUES('A');
INSERT INTO dbo.T (c3) VALUES('B');
INSERT INTO dbo.T (c3) VALUES('C');
INSERT INTO dbo.T (c3) VALUES('D');
GO
SELECT * FROM dbo.T;
GO
SET IDENTITY_INSERT dbo.T ON;
GO
INSERT INTO dbo.T (c3) VALUES('E');
GO
SELECT * FROM dbo.T;
GO
DROP TABLE dbo.T;
GO


AMB


"Bartolomé Genovard" wrote:

HOla

como en mi tabla tengo uncampo calculado, he creado un trigger para
que me modifique el insert y excluya el campo calculado y el ID.

El trigger es:

create TRIGGER [dbo].[mi_trigger] ON [dbo].[t_tabla1]
INSTEAD OF INSERT
AS
BEGIN

insert into t_tabla1 (campo1, campo2, campo3)
Select campo1, campo2, campo3
FROM inserted
END

si hago un insert sql incluyendo en la sentencia insert el campo
calculado y el id, me salta el error...

Msg 271, Level 16, State 1, Line 5
The column "cc_grupo" cannot be modified because it is either a
computed column or is the result of a UNION operator.

no entiendo nada

¿como puedo ver si realmente se dispara el trigger?

gracias
.

Preguntas similares