Resolver el valor de campos dinamicamente en tablas inserted y deleted

29/10/2003 - 10:32 por MONTREL S. A. \(Dpto. Ingeniería Informática\) | Informe spam
Hola a todos, tengo un problema y es que no puedo acceder al valor de un
campo cuyo nombre tengo almacenado en una variable y además, lo estoy
intentando desde un trigger y la tabla en cuestión es inserted y/o deleted.
El código del trigger es el siguiente:

CREATE TRIGGER [trgDETECTA_CAMBIOS] ON [dbo].Tabla1
FOR UPDATE
AS
DECLARE @NumColumnas INT
DECLARE @Contador INT
DECLARE @Nivel INT
DECLARE @Campo sysname
DECLARE @CampoOld varchar(100)
DECLARE @CampoNew varchar(100)
DECLARE @IDTabla INT
DECLARE @Tabla varchar(150)
DECLARE @Comando varchar(200)

SET @Contador=1
SET @Nivel=1
SET @Tabla='Tabla1'
SET @IDTabla=OBJECT_ID(@Tabla)
SELECT @NumColumnas=COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME=@Tabla

WHILE @Contador <= @NumColumnas
BEGIN
SET @Campo=COL_NAME(@IDTabla, @Contador)

IF SUBSTRING(COLUMNS_UPDATED(), @Nivel, 1) = POWER(2, (@Contador-1))
BEGIN


SELECT @CampoNew=@Campo FROM inserted
SELECT @CampoOld=@Campo FROM deleted

INSERT INTO Tabla2 (DESCRIPCION)
VALUES ('Se modificó el campo ' + @Campo + ': ' + @CampoOld +
'->' + @CampoNew)
END

IF @Contador=8
BEGIN
SET @Contador=1
SET @Nivel=@Nivel + 1
END
ELSE
SET @Contador=@Contador + 1

END

También he intentado hacerlo mediante el procedimiento sp_executesql, pero
como es lógico no es factible, ya que el ámbito de las tablas inserted y
deleted se limita simplemente al cuerpo del trigger.

Lo he intentado todo, pero sin éxito.

Saludos y gracias de antemano.


Juan Manuel Cid Muñoz
Dpto. Ingeniería Informática

MONTREL S. A.
 

Leer las respuestas

#1 Accotto Maximiliano Damian
29/10/2003 - 13:18 | Informe spam
Hola!! mira estuve leyendo tu trigger y queria hacerte una pregunta:

Porque guardas un solo valor?

SELECT @CampoNew=@Campo FROM inserted
Mostrar la cita
esto hara que se guarde un solo valor, quiere decir que si insertas mas de
un registro en la tabla este trigger no se va a comportar bien.

Te pregunto esto por si es una cuestion especial o si esta mal pensado el
trigger. Porque quizas lo q tengamos que ver es q esperas del trigger y como
se podria hacer, (me explico?)

Gracias

Accotto Maximiliano Damian
"MONTREL S. A. (Dpto. Ingeniería Informática)"
escribió en el mensaje news:u1g$
Mostrar la cita
deleted.
Mostrar la cita
(@Contador-1))
Mostrar la cita
+
Mostrar la cita

Preguntas similares