SQL Server - Invalid object name 'I'.

 
Vista:

Invalid object name 'I'.

Publicado por Regina (9 intervenciones) el 30/03/2007 17:35:42
hola tengo que generar un trigger que haga una auditoria sobre una tabla para que cuando se actualize registre en otra tabla los cambios realizados y envie un mail a determinados usuarios...

el trigger compila y corre pero al momento de querer comprobarlo con una actualización me marca el siguiente error :

(1 row(s) affected)

Server: Msg 208, Level 16, State 1, Procedure trg_u_tcad_Prueba, Line 38
Invalid object name 'I'.

NI SIQUIERA TENGO UN OBJETO "I" Y AUNQUE ME MARQUE QUE HAY UNA FILA AFECTADA NO ALMACENA NADA EN LA TABLA...

ALGUIEN ME PUEDE AYUDAR??


CREATE TRIGGER tgr_u_tcad_Prueba ON tcad_Prueba FOR UPDATE
AS

DECLARE @clave int
SET @clave = (select (claId) FROM Inserted)

DECLARE @RowCount int
SET @RowCount = @@RowCount

DECLARE @mensaje varchar(100)
SET @mensaje = ''

BEGIN
IF (SELECT COUNT (*)
FROM Inserted JOIN tcad_Prueba
ON Inserted.claId = tcad_Prueba.claId ) != @RowCount
BEGIN

IF ((SELECT (nombre) FROM Inserted) <> (SELECT (nombre) FROM tcad_Prueba ))
SET @mensaje = @mensaje+', '+'nombre'
IF ((SELECT (Apellidos) FROM Inserted) <> (SELECT (Apellidos) FROM tcad_Prueba))
SET @mensaje = @mensaje+', '+'Apellidos'
IF ((SELECT (fechaNacimiento) FROM Inserted) <> (SELECT (fechaNacimiento) FROM tcad_Prueba))
SET @mensaje = @mensaje+', '+'fechaNacimiento'
IF ((SELECT (ingresoMensual) FROM Inserted) <> (SELECT (ingresoMensual) FROM tcad_Prueba))
SET @mensaje = @mensaje+', '+'ingresoMensual'
IF ((SELECT (Casado) FROM Inserted) <> (SELECT (Casado) FROM tcad_Prueba))
SET @mensaje = @mensaje+', '+'Casado'
END

INSERT INTO tcad_Prueba
(
claId,
nombre,
Apellidos,
fechaNacimiento,
ingresoMensual,
Casado
)
SELECT
Inserted.claId,
Inserted.nombre,
Inserted.Apellidos,
Inserted.fechaNacimiento,
Inserted.ingresoMensual,
Inserted.Casado
FROM Inserted


INSERT INTO tcad_Modificados
(
cnsc_original,
fec_hora_modif,
tipo_modif,
colum_modif,
status_mail
)
VALUES
(
@clave,
getdate(),
'Actualización',
@mensaje,
0
)


EXEC master.dbo.xp_sendmail
@recipients = '[email protected]',
@subject = 'Email Automático',
@message = 'A la tabla se le ha actualizado un registro';


RETURN

END


ESTA ES LA RUTINA QUE UTILIZO PARA ACTUALIZAR UN REGISTRO

SET IDENTITY_INSERT tcad_Modificados ON
update tcad_Prueba
set nombre = 'Nuevo Nombre'
where claId = 1
SET IDENTITY_INSERT tcad_Modificados OFF

GRACIAS!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Invalid object name 'I'.

Publicado por Isaías (3308 intervenciones) el 30/03/2007 20:03:14
Por principio de cuentas, cambia tu notacion (ANSI 92) " !=", por LEFT, RIGHT, OUTER (LEFT / RIGHT), FULL, o la que corresponda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Invalid object name 'I'.

Publicado por Regina (9 intervenciones) el 30/03/2007 20:55:11
ME SIGUE MARCANDO LO MISMO... SE ME HACE QUE TENGO MAL DEFINIDOS MIS CRITERIOS DE CONSULTA... PERO NO ENCUENTRO DÓNDE...

DECLARE @clave int
SET @clave = (select (claId) FROM Inserted)

DECLARE @RowCount int
SET @RowCount = @@RowCount

DECLARE @mensaje varchar(100)
SET @mensaje = ''

BEGIN


SELECT * FROM Inserted FULL JOIN tcad_Prueba ON Inserted.claId = tcad_Prueba.claId


/*IF (SELECT COUNT (*)
FROM Inserted INNER JOIN tcad_Prueba
ON Inserted.claId = tcad_Prueba.claId ) != @RowCount
*/

IF ((SELECT (nombre) FROM Inserted) <> (SELECT (nombre) FROM tcad_Prueba ))
SET @mensaje = @mensaje+', '+'nombre'
IF ((SELECT (Apellidos) FROM Inserted) <> (SELECT (Apellidos) FROM tcad_Prueba))
SET @mensaje = @mensaje+', '+'Apellidos'
IF ((SELECT (fechaNacimiento) FROM Inserted) <> (SELECT (fechaNacimiento) FROM tcad_Prueba))
SET @mensaje = @mensaje+', '+'fechaNacimiento'
IF ((SELECT (ingresoMensual) FROM Inserted) <> (SELECT (ingresoMensual) FROM tcad_Prueba))
SET @mensaje = @mensaje+', '+'ingresoMensual'
IF ((SELECT (Casado) FROM Inserted) <> (SELECT (Casado) FROM tcad_Prueba))
SET @mensaje = @mensaje+', '+'Casado'

INSERT INTO tcad_Prueba
(
claId,
nombre,
Apellidos,
fechaNacimiento,
ingresoMensual,
Casado
)
SELECT
Inserted.claId,
Inserted.nombre,
Inserted.Apellidos,
Inserted.fechaNacimiento,
Inserted.ingresoMensual,
Inserted.Casado
FROM Inserted

INSERT INTO tcad_Modificados
(
cnsc_original,
fec_hora_modif,
tipo_modif,
colum_modif,
status_mail
)
VALUES
(
@clave,
getdate(),
'Actualización',
@mensaje,
0
)

EXEC master.dbo.xp_sendmail
@recipients = '[email protected]',
@subject = 'Email Automático',
@message = 'A la tabla se le ha actualizado un registro';


RETURN

END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Invalid object name 'I'.

Publicado por Isaías (3308 intervenciones) el 30/03/2007 22:11:58
Tienes problemas pero en el diseño de tu Trigger.

IF ((SELECT (nombre) FROM Inserted) <> (SELECT (nombre) FROM tcad_Prueba ))
SET @mensaje = @mensaje+', '+'nombre'

Aqui, el 2o SELECT, trae TODOS los registros de tu tabla tcad_Prueba, no colocas un WHERE

En tu primer SELECT, debes tomar en cuenta que tu base INSERTED, puede contener MAS de un registro.

Por otra parte, si quieres saber QUE CAMPO SE MODIFICO, debes usar:
IF UPDATE ( column )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar