Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème TransctSQL

1 réponse
Avatar
mchd
Bonjour,

Voici mon problème si quelq'un peut m'aider:

Suite à une migration Access 2000 --> SQL Server 2000 s'est posé un problème
du fait d'une difference de fonctionnement entre ces deux types de bases.

Sous Access j'avais un lien d'integrité referentielle entre deux tables,
avec mise a jour en cascade,
Table1-->Table2 sur un champs Champ1 (clé primaire dans Table1). Sous Access
il était permis que Champ1 soit null dans Table2.

La migration Access -->SQL Server a créé un trigger correspendant au lien
entre les deux tables en cas de mise à jour du champ Champ1 dans Table2. Par
contre il n'est plus permis que Champ1 soit null dans Table2. Ce qui génant
pour moi.

Y a t'il moyen de modifiet le trigger pour corriger ce problème. Je ne
connais pas Transact SQL et mes premières recherches ne m'ont pas fait
avancé.

Comment modifier le code du trigger pour prendre un compte le problème.
Voici le code du trigger actuel.

======================================
CREATE TRIGGER T_Table2_UTrig ON [Table2] FOR UPDATE AS
SET NOCOUNT ON
/* * PAS DE MISES À JOUR S'IL N'Y A PAS DE CLÉ CORRESPONDANTE DANS 'Table1'
*/
IF UPDATE(grp_code)
BEGIN
IF (SELECT COUNT(*) FROM inserted) !=
(SELECT COUNT(*) FROM Table1, inserted WHERE (Table1.Champ1 =
inserted.Champ1))
BEGIN
RAISERROR 44446 'L''enregistrement ne peut être ajouté ni
modifié. Les règles d''intégrité référentielle requièrent un enregistrement
lié dans la table ''Table1''.'
ROLLBACK TRANSACTION
END
END
=====================================

Merci pour toute aide

1 réponse

Avatar
Fred BROUARD
Point n'est besoin d'un trigger car la version 2000 gère si je ne
m'abuse les contraintes d'intégrité avec mise à jour en cascade...

Donc un ajout de contrainte me parait la chose la plus simple :
ALTER TABLE ADD CONSTRAINT FK_COLONNE FOREIGN KEY
REFERENCES TABLE_1 (colonne1, colonne2)
ON DELETE CASCADE
ON UPDATE CASCADE


A lire sur le sujet : http://sqlpro.developpez.com/SQL_AZ_7b.html#SCHEMA73

A +


mchd a écrit:
Bonjour,

Voici mon problème si quelq'un peut m'aider:

Suite à une migration Access 2000 --> SQL Server 2000 s'est posé un problème
du fait d'une difference de fonctionnement entre ces deux types de bases.

Sous Access j'avais un lien d'integrité referentielle entre deux tables,
avec mise a jour en cascade,
Table1-->Table2 sur un champs Champ1 (clé primaire dans Table1). Sous Access
il était permis que Champ1 soit null dans Table2.

La migration Access -->SQL Server a créé un trigger correspendant au lien
entre les deux tables en cas de mise à jour du champ Champ1 dans Table2. Par
contre il n'est plus permis que Champ1 soit null dans Table2. Ce qui génant
pour moi.

Y a t'il moyen de modifiet le trigger pour corriger ce problème. Je ne
connais pas Transact SQL et mes premières recherches ne m'ont pas fait
avancé.

Comment modifier le code du trigger pour prendre un compte le problème.
Voici le code du trigger actuel.

===================================== > CREATE TRIGGER T_Table2_UTrig ON [Table2] FOR UPDATE AS
SET NOCOUNT ON
/* * PAS DE MISES À JOUR S'IL N'Y A PAS DE CLÉ CORRESPONDANTE DANS 'Table1'
*/
IF UPDATE(grp_code)
BEGIN
IF (SELECT COUNT(*) FROM inserted) ! > (SELECT COUNT(*) FROM Table1, inserted WHERE (Table1.Champ1 > inserted.Champ1))
BEGIN
RAISERROR 44446 'L''enregistrement ne peut être ajouté ni
modifié. Les règles d''intégrité référentielle requièrent un enregistrement
lié dans la table ''Table1''.'
ROLLBACK TRANSACTION
END
END
==================================== >
Merci pour toute aide





--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************