Problema con create trigger after update

27/01/2005 - 12:47 por Carlos | Informe spam
he creado un desencadenador para una tabla y todo funciona bien hasta
que utilizo columnas que contegan _

para simplificar pongo esta asignacion como ejemplo

CREATE TRIGGER CNG_ACT_INSCRIP_ASIS ON congreso_asistente
AFTER UPDATE
AS
Declare @codigopostal nvarchar(10)
set @codigopostal=cp_cont

me dice que:
invalid column name cp_cont

estoy SEGURO de que es el nombre correcto por lo tanto que esta fallando
ya que si utilizo campos sin guion bajo me lo complia perfectamente.

Llevo toda la mñn y toy "desesperada"

Un saludo

Preguntas similare

Leer las respuestas

#6 ulises
27/01/2005 - 14:26 | Informe spam
Esta sentencia en realidad no está haciendo ninguna
modificación :

update dbo.congreso_inscripcion
set dbo.congreso_inscripcion.nombre=nombre
where dbo.congreso_inscripcion.ID_inscripcion=ID_inscripcion

ya que esta modificando el campo "nombre" de la tabla
congreso_inscripción con el mismo valor de "nombre" y es
ese el motivo por el cual no te da error. ¿Los campos
nombre y direccion_cont en que tabla se encuentran? si los
campos se encuentran en la tabla inserted tendrías que
hacer lo siguiente :

update dbo.congreso_inscripcion
set dbo.congreso_inscripcion.nombre= i.nombre
from inserted i
where dbo.congreso_inscripcion.ID_inscripcion=i.ID_inscripcion

Saludos,
Ulises

mi sentencia completa es:

use Formacion
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'CNG_ACT_INSCRIP_ASIS' AND type = 'TR')
DROP TRIGGER CNG_ACT_INSCRIP_ASIS
GO

CREATE TRIGGER CNG_ACT_INSCRIP_ASIS ON congreso_asistente
AFTER UPDATE
AS

IF NOT @@ROWCOUNT = 1
RETURN

IF UPDATE(nombre) BEGIN
update dbo.congreso_inscripcion
set dbo.congreso_inscripcion.nombre=nombre
where dbo.congreso_inscripcion.ID_inscripcion=ID_inscripcion
END

IF UPDATE(direccion_cont) BEGIN
update dbo.congreso_inscripcion
set dbo.congreso_inscripcion.direccion_emp=direccion_cont
where dbo.congreso_inscripcion.ID_inscripcion=ID_inscripcion
END

con nombre me funciono OK, pero con direccion_cont
me dice nombre de columna no valido
y haciendo provatinas es en la clausula set del update

set dbo.congreso_inscripcion.direccion_emp=direccion_cont

que hago mal

un saludo y gracias por vuestro interes...


ulises escribió:
¿Esa sentencia de ejemplo está completa?

set @codigopostal=cp_cont

porque es inválida ya que estaría asumiendo que es el
nombre de una columna y debería ir en un SELECT FROM.

Saludos,
Ulises


he creado un desencadenador para una tabla y todo funciona



bien hasta

que utilizo columnas que contegan _

para simplificar pongo esta asignacion como ejemplo

CREATE TRIGGER CNG_ACT_INSCRIP_ASIS ON congreso_asistente
AFTER UPDATE
AS
Declare @codigopostal nvarchar(10)
set @codigopostal=cp_cont

me dice que:
invalid column name cp_cont

estoy SEGURO de que es el nombre correcto por lo tanto que



esta fallando

ya que si utilizo campos sin guion bajo me lo complia



perfectamente.

Llevo toda la mñn y toy "desesperada"

Un saludo
.





.

Respuesta Responder a este mensaje
#7 Carlos
27/01/2005 - 14:37 | Informe spam
Bueno los campos son de la tabla congreso_asistente que es sobre la que
se ejecuta el trigger y he leido que no se puede poner la extension.

no es una insercion es un update

¿se utiliza la tabla inserted i para obtenter el valor de la modificacion?

A lo mejor estoy metiendo la pata, os agradezco vuestro interes..

mi sentencia completa es:

use Formacion
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'CNG_ACT_INSCRIP_ASIS' AND type = 'TR')
DROP TRIGGER CNG_ACT_INSCRIP_ASIS
GO

CREATE TRIGGER CNG_ACT_INSCRIP_ASIS ON congreso_asistente
AFTER UPDATE
AS

IF NOT @@ROWCOUNT = 1
RETURN

IF UPDATE(nombre) BEGIN
update dbo.congreso_inscripcion
set dbo.congreso_inscripcion.nombre=nombre
where dbo.congreso_inscripcion.ID_inscripcion=ID_inscripcion
END

IF UPDATE(direccion_cont) BEGIN
update dbo.congreso_inscripcion
set dbo.congreso_inscripcion.direccion_emp=direccion_cont
where dbo.congreso_inscripcion.ID_inscripcion=ID_inscripcion
END

con nombre me funciono OK, pero con direccion_cont
me dice nombre de columna no valido
y haciendo provatinas es en la clausula set del update

set dbo.congreso_inscripcion.direccion_emp=direccion_cont

que hago mal

un saludo y gracias por vuestro interes...


Respuesta Responder a este mensaje
#8 Carlos
27/01/2005 - 14:52 | Informe spam
SI SI ya esta con lo de i from inserted i...

Pero la pregunta del millon
porque solo salta con los nombres con guion bajo y no con los otros ?????

GRACIAS A ULISES POR LA IDEA y GRACIAS A CARLOS SACRISTAN POR EL INTERES

Carlos escribió:
Bueno los campos son de la tabla congreso_asistente que es sobre la que
se ejecuta el trigger y he leido que no se puede poner la extension.

no es una insercion es un update

¿se utiliza la tabla inserted i para obtenter el valor de la modificacion?

A lo mejor estoy metiendo la pata, os agradezco vuestro interes..

mi sentencia completa es:

use Formacion
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'CNG_ACT_INSCRIP_ASIS' AND type = 'TR')
DROP TRIGGER CNG_ACT_INSCRIP_ASIS
GO

CREATE TRIGGER CNG_ACT_INSCRIP_ASIS ON congreso_asistente
AFTER UPDATE
AS

IF NOT @@ROWCOUNT = 1
RETURN

IF UPDATE(nombre) BEGIN
update dbo.congreso_inscripcion
set dbo.congreso_inscripcion.nombre=nombre
where dbo.congreso_inscripcion.ID_inscripcion=ID_inscripcion
END

IF UPDATE(direccion_cont) BEGIN
update dbo.congreso_inscripcion
set dbo.congreso_inscripcion.direccion_emp=direccion_cont
where dbo.congreso_inscripcion.ID_inscripcion=ID_inscripcion
END

con nombre me funciono OK, pero con direccion_cont
me dice nombre de columna no valido
y haciendo provatinas es en la clausula set del update

set dbo.congreso_inscripcion.direccion_emp=direccion_cont

que hago mal

un saludo y gracias por vuestro interes...


Respuesta Responder a este mensaje
#9 Salvador Ramos
27/01/2005 - 15:25 | Informe spam
La verdad que como indica Carlos es muy extraño. Prueba a generar el script
sql desde el enterprise manager, a copiarlo en el query analyzer y a generar
la tabla con otro nombre, y a ver si te ocurre lo mismo. Es para descartar
el teclear algo para evitar cualquier diferencia.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
¿En esa misma tabla existe otro campo con guión bajo y te funciona?
¿Estás seguro que estás mirando la tabla correcta? (puede ser que exista
otra tabla con el mismo nombre pero diferente propietario y no te hayas
percatado de ello)

Realmente es muy extraño el asunto


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Carlos" escribió en el mensaje
news:
GRACIAS por tu interes te comento...
he echo pruebas.
me he creado otra tabla con campos _ y funciona perfectamente??

el nombre de la columna es correcto, pero por lo que sea esa tabla no
permite la llamada a es campo, pro si acaso he ido a ver los permisos
del campo y estan OK entonces ¿PORQUEEEEEE?

Un saludo...

desesperado doblemente


Carlos Sacristán escribió:
> Si estás seguro que es por el tema del guión bajo, prueba a poner
> el
> nombre del campo entre corchetes [] aunque yo nunca he tenido problemas


de
> este tipo...
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> "Carlos" escribió en el mensaje
> news:
>
>>he creado un desencadenador para una tabla y todo funciona bien hasta
>>que utilizo columnas que contegan _
>>
>>para simplificar pongo esta asignacion como ejemplo
>>
>>CREATE TRIGGER CNG_ACT_INSCRIP_ASIS ON congreso_asistente
>>AFTER UPDATE
>>AS
>>Declare @codigopostal nvarchar(10)
>>set @codigopostal=cp_cont
>>
>>me dice que:
>>invalid column name cp_cont
>>
>>estoy SEGURO de que es el nombre correcto por lo tanto que esta
>>fallando
>>ya que si utilizo campos sin guion bajo me lo complia perfectamente.
>>
>>Llevo toda la mñn y toy "desesperada"
>>
>>Un saludo
>
>
>




Respuesta Responder a este mensaje
#10 ulises
27/01/2005 - 16:50 | Informe spam
Carlos, te aconsejo que le des una mirada en el BOL al tema
de triggers, pero en resumen los triggers trabajan con dos
tablas deleted e inserted donde se guarda en el caso de
actualización los valores de las filas antes y después de
la actualizacón, de esta manera cuando trabajes en el
trigger tienes que especificar de que tabla vas a realizar
la operación, de esa manera tu trigger quedaría en algo como :

CREATE TRIGGER CNG_ACT_INSCRIP_ASIS ON congreso_asistente
AFTER UPDATE
AS
IF UPDATE(nombre) BEGIN
update congreso_inscripcion
set c.nombre = i.nombre
from inserted i join congreso_inscripcion c
on i.ID_inscripcion= c.ID_inscripcion
END
IF UPDATE(direccion_cont) BEGIN
update congreso_inscripcion
set c.direccion_emp = i.direccion_cont
from inserted i join congreso_inscripcion c
on i.ID_inscripcion= c.ID_inscripcion
END

Saludos,
Ulises

SI SI ya esta con lo de i from inserted i...

Pero la pregunta del millon
porque solo salta con los nombres con guion bajo y no con


los otros ?????

GRACIAS A ULISES POR LA IDEA y GRACIAS A CARLOS SACRISTAN


POR EL INTERES

Carlos escribió:
Bueno los campos son de la tabla congreso_asistente que




es sobre la que
se ejecuta el trigger y he leido que no se puede poner




la extension.

no es una insercion es un update

¿se utiliza la tabla inserted i para obtenter el valor




de la modificacion?

A lo mejor estoy metiendo la pata, os agradezco vuestro




interes..

mi sentencia completa es:

use Formacion
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'CNG_ACT_INSCRIP_ASIS' AND type = 'TR')
DROP TRIGGER CNG_ACT_INSCRIP_ASIS
GO

CREATE TRIGGER CNG_ACT_INSCRIP_ASIS ON congreso_asistente
AFTER UPDATE
AS

IF NOT @@ROWCOUNT = 1
RETURN

IF UPDATE(nombre) BEGIN
update dbo.congreso_inscripcion
set dbo.congreso_inscripcion.nombre=nombre
where








dbo.congreso_inscripcion.ID_inscripcion=ID_inscripcion
END

IF UPDATE(direccion_cont) BEGIN
update dbo.congreso_inscripcion
set dbo.congreso_inscripcion.direccion_emp=direccion_cont
where








dbo.congreso_inscripcion.ID_inscripcion=ID_inscripcion
END

con nombre me funciono OK, pero con direccion_cont
me dice nombre de columna no valido
y haciendo provatinas es en la clausula set del update

set dbo.congreso_inscripcion.direccion_emp=direccion_cont

que hago mal

un saludo y gracias por vuestro interes...








.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida