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