Relaciones Insert-Update

02/08/2005 - 10:55 por Paco | Informe spam
Hola a todos
Tengo un problemilla con unas relaciones a ver si alguien me puede ayudar
Tengo una tabla de Paises con Codigo y Descripcion
En otra tabla tengo dos campos PaisResidencia y PaisNacimiento estos campos
tienen una relación con la tabla Paises. No puede hacer la actualización
automatica para ambos campos.
Las relaciones están definidas así:
Exigir relacion para insert y update en ambas relaciones.
En una de ellas Actualizar en cascada.
Y he creado un trigger para actualizar el campo de la segunda relación.
El problema es que me da error igualmente. Parece que realiza la
comprobación de Insert y Update antes de ejecutar el trigger. ¿Habría alguna
forma de que hiciese la comprobación después del trigger?

Gracias a todos

Preguntas similare

Leer las respuestas

#1 Maxi
02/08/2005 - 13:53 | Informe spam
la Paco, un detalle, si usas la cascada para que usar triggers? yo empezaria
sacando el trigger y que nos indiques el error que marca de ser asi.


Salu2
Maxi


"Paco" escribió en el mensaje
news:
Hola a todos
Tengo un problemilla con unas relaciones a ver si alguien me puede ayudar
Tengo una tabla de Paises con Codigo y Descripcion
En otra tabla tengo dos campos PaisResidencia y PaisNacimiento estos
campos
tienen una relación con la tabla Paises. No puede hacer la actualización
automatica para ambos campos.
Las relaciones están definidas así:
Exigir relacion para insert y update en ambas relaciones.
En una de ellas Actualizar en cascada.
Y he creado un trigger para actualizar el campo de la segunda relación.
El problema es que me da error igualmente. Parece que realiza la
comprobación de Insert y Update antes de ejecutar el trigger. ¿Habría
alguna
forma de que hiciese la comprobación después del trigger?

Gracias a todos
Respuesta Responder a este mensaje
#2 Alejandro Mesa
02/08/2005 - 14:41 | Informe spam
Paco,

Como ves, sql server no permite usar la opcion de actualizacion o borrado en
cascada cuando una tabla esta relacionada mas de una vez con la misma tabla.
Las restricciones son comprobadas antes de disparar los triggers, por lo que
te sugiero que desabilites la opcion de actualizacion / borrado en cascada y
pongas la regla de negocio en un trigger (puede ser un INSTEAD OF).

Las relaciones están definidas así:
Exigir relacion para insert y update en ambas relaciones.



Pudieras postear la definicion de ambas tablas, incluyendo restricciones?


AMB

"Paco" wrote:

Hola a todos
Tengo un problemilla con unas relaciones a ver si alguien me puede ayudar
Tengo una tabla de Paises con Codigo y Descripcion
En otra tabla tengo dos campos PaisResidencia y PaisNacimiento estos campos
tienen una relación con la tabla Paises. No puede hacer la actualización
automatica para ambos campos.
Las relaciones están definidas así:
Exigir relacion para insert y update en ambas relaciones.
En una de ellas Actualizar en cascada.
Y he creado un trigger para actualizar el campo de la segunda relación.
El problema es que me da error igualmente. Parece que realiza la
comprobación de Insert y Update antes de ejecutar el trigger. ¿Habría alguna
forma de que hiciese la comprobación después del trigger?

Gracias a todos
Respuesta Responder a este mensaje
#3 Paco
03/08/2005 - 13:26 | Informe spam
Creo que ya me has respondido al decirme que comprueba las restricciones
antes de los triggers pero de todos modos te posteo aquí las tablas y el
trigger

CREATE TABLE [Clientes] (
[Cliente] [nvarchar] (20) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Nombre] [nvarchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[Direccion] [nvarchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
[Poblacion] [nvarchar] (20) COLLATE Modern_Spanish_CI_AS NULL ,
[Pais] [nvarchar] (20) COLLATE Modern_Spanish_CI_AS NULL ,
[PaisNacimiento] [nvarchar] (20) COLLATE Modern_Spanish_CI_AS NULL ,
[FechaNacimiento] [datetime] NULL ,
CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED
(
[Cliente]
) ON [PRIMARY] ,
CONSTRAINT [FK_Clientes_Paises] FOREIGN KEY
(
[Pais]
) REFERENCES [Paises] (
[Pais]
) ON UPDATE CASCADE ,
CONSTRAINT [FK_Clientes_Paises1] FOREIGN KEY
(
[PaisNacimiento]
) REFERENCES [Paises] (
[Pais]
)
) ON [PRIMARY]

CREATE TABLE [Paises] (
[Pais] [nvarchar] (20) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[Descripcion] [nvarchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
CONSTRAINT [PK_Paises] PRIMARY KEY CLUSTERED
(
[Pais]
) ON [PRIMARY]
) ON [PRIMARY]

y este es el trigger que tengo para la actualización del campo PaisNacimiento

ALTER TRIGGER U_Paises_Pais
ON Paises
FOR UPDATE
AS

IF NOT UPDATE(Pais)
RETURN

declare @act varchar(20), @ant varchar(20)
SELECT @act = Pais FROM Inserted
SELECT @ant = Pais FROM Deleted

UPDATE Clientes
SET PaisNacimiento = @act
FROM Inserted
WHERE Clientes.PaisNacimiento = @ant

Gracias.

"Alejandro Mesa" escribió:

Paco,

Como ves, sql server no permite usar la opcion de actualizacion o borrado en
cascada cuando una tabla esta relacionada mas de una vez con la misma tabla.
Las restricciones son comprobadas antes de disparar los triggers, por lo que
te sugiero que desabilites la opcion de actualizacion / borrado en cascada y
pongas la regla de negocio en un trigger (puede ser un INSTEAD OF).

> Las relaciones están definidas así:
> Exigir relacion para insert y update en ambas relaciones.

Pudieras postear la definicion de ambas tablas, incluyendo restricciones?


AMB

"Paco" wrote:

> Hola a todos
> Tengo un problemilla con unas relaciones a ver si alguien me puede ayudar
> Tengo una tabla de Paises con Codigo y Descripcion
> En otra tabla tengo dos campos PaisResidencia y PaisNacimiento estos campos
> tienen una relación con la tabla Paises. No puede hacer la actualización
> automatica para ambos campos.
> Las relaciones están definidas así:
> Exigir relacion para insert y update en ambas relaciones.
> En una de ellas Actualizar en cascada.
> Y he creado un trigger para actualizar el campo de la segunda relación.
> El problema es que me da error igualmente. Parece que realiza la
> comprobación de Insert y Update antes de ejecutar el trigger. ¿Habría alguna
> forma de que hiciese la comprobación después del trigger?
>
> Gracias a todos
Respuesta Responder a este mensaje
#4 qwalgrande
04/08/2005 - 17:36 | Informe spam
Hola.

No sé si será algo de ejemplo, pero en general, las tablas de países no
cambian mucho. Tener una actualización en cascada o un trigger para ello
(dos puntos que en general no me gustan), para un campo de código de país,
no tiene mucho sentido. ¿No puedes prescindir de ello? Si precisas un cambio
de ese estilo, puede preparar un script o un procedimiento almacenado que se
encargue de ello.

qwalgrande

"De lo que ves créete la mitad, de lo que no ves no te creas nada"
V. del V.


"Paco" escribió en el mensaje
news:
Hola a todos
Tengo un problemilla con unas relaciones a ver si alguien me puede ayudar
Tengo una tabla de Paises con Codigo y Descripcion
En otra tabla tengo dos campos PaisResidencia y PaisNacimiento estos
campos
tienen una relación con la tabla Paises. No puede hacer la actualización
automatica para ambos campos.
Las relaciones están definidas así:
Exigir relacion para insert y update en ambas relaciones.
En una de ellas Actualizar en cascada.
Y he creado un trigger para actualizar el campo de la segunda relación.
El problema es que me da error igualmente. Parece que realiza la
comprobación de Insert y Update antes de ejecutar el trigger. ¿Habría
alguna
forma de que hiciese la comprobación después del trigger?

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