Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux
faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne
dans la terminologie ce me semble) prenne une valeur issu d'une autre
table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des
enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout
d'enregistrement, si l'utilisateur veux ensuite modifier les valeurs il le
pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable
je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop
simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux
faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne
dans la terminologie ce me semble) prenne une valeur issu d'une autre
table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des
enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout
d'enregistrement, si l'utilisateur veux ensuite modifier les valeurs il le
pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable
je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop
simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux
faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne
dans la terminologie ce me semble) prenne une valeur issu d'une autre
table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des
enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout
d'enregistrement, si l'utilisateur veux ensuite modifier les valeurs il le
pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable
je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop
simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur issu
d'une autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite modifier
les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur issu
d'une autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite modifier
les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur issu
d'une autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite modifier
les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les
enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les
enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les
enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
Oui cela va fonctionner
INNER JOIN inserted i ON MaTableSource.ID = i.ID
Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"YDN" wrote in message news:%Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Oui cela va fonctionner
INNER JOIN inserted i ON MaTableSource.ID = i.ID
Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"YDN" <fgargamel@hotmail.com> wrote in message news:%23tJRhjtaFHA.3488@tk2msftngp13.phx.gbl...
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Oui cela va fonctionner
INNER JOIN inserted i ON MaTableSource.ID = i.ID
Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"YDN" wrote in message news:%Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Oui, la notion de champ n'existe pas...
...http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
Est ce faisable ?
Tout à fait.
Bonjour,
YDN a écrit:Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
Oui, la notion de champ n'existe pas en base de données car une base ne procède pas à la saisie. or le champ est une notion
visuelle. En matière de SGBDR on parle ligne (et non enregistrement) et colonne (et non champ).
A lire sur le sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Tout à fait. Si une insertion, modif ou suppression concerne 100 000 lignes, le trigger ne se déclenche qu'une seule fois.
Autrement dit le trigger se déclenche sur l'ordre SQL concerné (INSERT, UPDATE, DELETE) que cet ordre concerne zéro lignes, une
seule ou de nombreuses lignes.Ce qui n'est pas mon cas ici.
Aucune importance car dans l'avenir ce peut être le cas.Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
Tout à fait.
Attention : dans le trigger, les données impactées figurent dans une pseudo table de nom "inserted" ou "deleted", suivant que l'on
procéde par ajout ou modif (inserted) ou bien par suppression (deleted). Il faut donc utiliser cette pseudo table dans le corps du
trigger.si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Voici un modèle pour ce faire :
CREATE TRIGGER TRG_POUR_FAIRE_CECI
ON TABLE_IMPACTEE
FOR INSERT
AS
UPDATE TABLE_IMPACTEE
SET MA_COLONNE_A_METTRE_A_JOUR = TS.MA_COLONNE_SOURCE
FROM TABLE_IMPACTEE TI
INNER JOIN inserted I
ON TI.COLONNE_CLEF = I.COLONNE_CLEF
INNER JOIN TABLE_SOURCE TS
ON TI.??? = TS.???
C'est tout. Comme tu n'as pas décrit ni tes tables, ni tes colonnes difficile de t'en dire plus.
A lire :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5.2
A +
Merci de toute contribution.
Merci d'avoir lu jusque là.
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Oui, la notion de champ n'existe pas...
...http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
Est ce faisable ?
Tout à fait.
Bonjour,
YDN a écrit:
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
Oui, la notion de champ n'existe pas en base de données car une base ne procède pas à la saisie. or le champ est une notion
visuelle. En matière de SGBDR on parle ligne (et non enregistrement) et colonne (et non champ).
A lire sur le sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Tout à fait. Si une insertion, modif ou suppression concerne 100 000 lignes, le trigger ne se déclenche qu'une seule fois.
Autrement dit le trigger se déclenche sur l'ordre SQL concerné (INSERT, UPDATE, DELETE) que cet ordre concerne zéro lignes, une
seule ou de nombreuses lignes.
Ce qui n'est pas mon cas ici.
Aucune importance car dans l'avenir ce peut être le cas.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
Tout à fait.
Attention : dans le trigger, les données impactées figurent dans une pseudo table de nom "inserted" ou "deleted", suivant que l'on
procéde par ajout ou modif (inserted) ou bien par suppression (deleted). Il faut donc utiliser cette pseudo table dans le corps du
trigger.
si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Voici un modèle pour ce faire :
CREATE TRIGGER TRG_POUR_FAIRE_CECI
ON TABLE_IMPACTEE
FOR INSERT
AS
UPDATE TABLE_IMPACTEE
SET MA_COLONNE_A_METTRE_A_JOUR = TS.MA_COLONNE_SOURCE
FROM TABLE_IMPACTEE TI
INNER JOIN inserted I
ON TI.COLONNE_CLEF = I.COLONNE_CLEF
INNER JOIN TABLE_SOURCE TS
ON TI.??? = TS.???
C'est tout. Comme tu n'as pas décrit ni tes tables, ni tes colonnes difficile de t'en dire plus.
A lire :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5.2
A +
Merci de toute contribution.
Merci d'avoir lu jusque là.
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Oui, la notion de champ n'existe pas...
...http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
Est ce faisable ?
Tout à fait.
Bonjour,
YDN a écrit:Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
Oui, la notion de champ n'existe pas en base de données car une base ne procède pas à la saisie. or le champ est une notion
visuelle. En matière de SGBDR on parle ligne (et non enregistrement) et colonne (et non champ).
A lire sur le sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Tout à fait. Si une insertion, modif ou suppression concerne 100 000 lignes, le trigger ne se déclenche qu'une seule fois.
Autrement dit le trigger se déclenche sur l'ordre SQL concerné (INSERT, UPDATE, DELETE) que cet ordre concerne zéro lignes, une
seule ou de nombreuses lignes.Ce qui n'est pas mon cas ici.
Aucune importance car dans l'avenir ce peut être le cas.Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
Tout à fait.
Attention : dans le trigger, les données impactées figurent dans une pseudo table de nom "inserted" ou "deleted", suivant que l'on
procéde par ajout ou modif (inserted) ou bien par suppression (deleted). Il faut donc utiliser cette pseudo table dans le corps du
trigger.si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Voici un modèle pour ce faire :
CREATE TRIGGER TRG_POUR_FAIRE_CECI
ON TABLE_IMPACTEE
FOR INSERT
AS
UPDATE TABLE_IMPACTEE
SET MA_COLONNE_A_METTRE_A_JOUR = TS.MA_COLONNE_SOURCE
FROM TABLE_IMPACTEE TI
INNER JOIN inserted I
ON TI.COLONNE_CLEF = I.COLONNE_CLEF
INNER JOIN TABLE_SOURCE TS
ON TI.??? = TS.???
C'est tout. Comme tu n'as pas décrit ni tes tables, ni tes colonnes difficile de t'en dire plus.
A lire :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5.2
A +
Merci de toute contribution.
Merci d'avoir lu jusque là.
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Attention : le trigger n'est exécuté qu'une seule fois, que l'insert
concerne une ligne ou plusieurs.
Et dans le cas où l'insert concerne plusieurs lignes, le code ci-dessous
risque de foutre un beau bordel....
Moralité : bien réfléchir avant d'utiliser des variables dans des triggers
(sauf cas particulier des curseurs...)
JN.
"Philippe T [MS]" a écrit dans le message
de news:Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les
enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
Attention : le trigger n'est exécuté qu'une seule fois, que l'insert
concerne une ligne ou plusieurs.
Et dans le cas où l'insert concerne plusieurs lignes, le code ci-dessous
risque de foutre un beau bordel....
Moralité : bien réfléchir avant d'utiliser des variables dans des triggers
(sauf cas particulier des curseurs...)
JN.
"Philippe T [MS]" <ptrotin@online.microsoft.com> a écrit dans le message
de news: OuzPZWyaFHA.612@TK2MSFTNGP12.phx.gbl...
Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les
enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
Attention : le trigger n'est exécuté qu'une seule fois, que l'insert
concerne une ligne ou plusieurs.
Et dans le cas où l'insert concerne plusieurs lignes, le code ci-dessous
risque de foutre un beau bordel....
Moralité : bien réfléchir avant d'utiliser des variables dans des triggers
(sauf cas particulier des curseurs...)
JN.
"Philippe T [MS]" a écrit dans le message
de news:Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les
enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
Bonsoir et merci beaucoup Fred pour ta réponse,Oui, la notion de champ n'existe pas...
...http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
Merci de ce premier éclaircissement.
Mais le quatrième est celui que j'ai préféré :Est ce faisable ?
Tout à fait.
Ton "Attention" m'a bien permi de comprendre la structure de ton exemple. "INNER JOIN inserted I"
Du coup ton exemple est pour moi très explicite (pour être honnête avec Philippe T, ma lecture de sa contribution m'avait déjà bien
dégrossi) mais franchement...
du coup j'ai fait un autre Trigger sur ta base et la syntaxe a été accepter !!!! Et je suis même arrivé à mettre ma table source !!!
Par contre
1) Mon Trigger ne rempli pas ma colonne :-(.
2) tu ne m'as pas mis de close Where dans ton exemple, j'en ai fait de même. Du coup, est ce pour cela ? Toute validation d'ajout
d'enregistrement est long... Ne mettrait il pas à jour tout les lignes existantes...
Quoi que, non ? l'absence de close Where, doit plutôt le perturber pour savoir quel ligne de la table source il doit prendre en
compte ?
J'ai oublié une précision importante j'ai une relation mère fille entre source et cible.
Je veux en effet (je pense que c'est bateau) mettre à jour des colonnes de la table "lignes"(cible) à partir d'une colonne de sa
table "en tête"(source).
Je cherche encore, et en tout cas merci encore
Merci d'avoir lu jusque là.
"Fred BROUARD" a écrit dans le message de news: %Bonjour,
YDN a écrit:Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
Oui, la notion de champ n'existe pas en base de données car une base ne procède pas à la saisie. or le champ est une notion
visuelle. En matière de SGBDR on parle ligne (et non enregistrement) et colonne (et non champ).
A lire sur le sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Tout à fait. Si une insertion, modif ou suppression concerne 100 000 lignes, le trigger ne se déclenche qu'une seule fois.
Autrement dit le trigger se déclenche sur l'ordre SQL concerné (INSERT, UPDATE, DELETE) que cet ordre concerne zéro lignes, une
seule ou de nombreuses lignes.Ce qui n'est pas mon cas ici.
Aucune importance car dans l'avenir ce peut être le cas.Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
Tout à fait.
Attention : dans le trigger, les données impactées figurent dans une pseudo table de nom "inserted" ou "deleted", suivant que l'on
procéde par ajout ou modif (inserted) ou bien par suppression (deleted). Il faut donc utiliser cette pseudo table dans le corps du
trigger.si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Voici un modèle pour ce faire :
CREATE TRIGGER TRG_POUR_FAIRE_CECI
ON TABLE_IMPACTEE
FOR INSERT
AS
UPDATE TABLE_IMPACTEE
SET MA_COLONNE_A_METTRE_A_JOUR = TS.MA_COLONNE_SOURCE
FROM TABLE_IMPACTEE TI
INNER JOIN inserted I
ON TI.COLONNE_CLEF = I.COLONNE_CLEF
INNER JOIN TABLE_SOURCE TS
ON TI.??? = TS.???
C'est tout. Comme tu n'as pas décrit ni tes tables, ni tes colonnes difficile de t'en dire plus.
A lire :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5.2
A +Merci de toute contribution.
Merci d'avoir lu jusque là.
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Bonsoir et merci beaucoup Fred pour ta réponse,
Oui, la notion de champ n'existe pas...
...http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
Merci de ce premier éclaircissement.
Mais le quatrième est celui que j'ai préféré :
Est ce faisable ?
Tout à fait.
Ton "Attention" m'a bien permi de comprendre la structure de ton exemple. "INNER JOIN inserted I"
Du coup ton exemple est pour moi très explicite (pour être honnête avec Philippe T, ma lecture de sa contribution m'avait déjà bien
dégrossi) mais franchement...
du coup j'ai fait un autre Trigger sur ta base et la syntaxe a été accepter !!!! Et je suis même arrivé à mettre ma table source !!!
Par contre
1) Mon Trigger ne rempli pas ma colonne :-(.
2) tu ne m'as pas mis de close Where dans ton exemple, j'en ai fait de même. Du coup, est ce pour cela ? Toute validation d'ajout
d'enregistrement est long... Ne mettrait il pas à jour tout les lignes existantes...
Quoi que, non ? l'absence de close Where, doit plutôt le perturber pour savoir quel ligne de la table source il doit prendre en
compte ?
J'ai oublié une précision importante j'ai une relation mère fille entre source et cible.
Je veux en effet (je pense que c'est bateau) mettre à jour des colonnes de la table "lignes"(cible) à partir d'une colonne de sa
table "en tête"(source).
Je cherche encore, et en tout cas merci encore
Merci d'avoir lu jusque là.
"Fred BROUARD" <brouardf@club-internet.fr> a écrit dans le message de news: %23vSFnZyaFHA.2420@TK2MSFTNGP12.phx.gbl...
Bonjour,
YDN a écrit:
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
Oui, la notion de champ n'existe pas en base de données car une base ne procède pas à la saisie. or le champ est une notion
visuelle. En matière de SGBDR on parle ligne (et non enregistrement) et colonne (et non champ).
A lire sur le sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Tout à fait. Si une insertion, modif ou suppression concerne 100 000 lignes, le trigger ne se déclenche qu'une seule fois.
Autrement dit le trigger se déclenche sur l'ordre SQL concerné (INSERT, UPDATE, DELETE) que cet ordre concerne zéro lignes, une
seule ou de nombreuses lignes.
Ce qui n'est pas mon cas ici.
Aucune importance car dans l'avenir ce peut être le cas.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
Tout à fait.
Attention : dans le trigger, les données impactées figurent dans une pseudo table de nom "inserted" ou "deleted", suivant que l'on
procéde par ajout ou modif (inserted) ou bien par suppression (deleted). Il faut donc utiliser cette pseudo table dans le corps du
trigger.
si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Voici un modèle pour ce faire :
CREATE TRIGGER TRG_POUR_FAIRE_CECI
ON TABLE_IMPACTEE
FOR INSERT
AS
UPDATE TABLE_IMPACTEE
SET MA_COLONNE_A_METTRE_A_JOUR = TS.MA_COLONNE_SOURCE
FROM TABLE_IMPACTEE TI
INNER JOIN inserted I
ON TI.COLONNE_CLEF = I.COLONNE_CLEF
INNER JOIN TABLE_SOURCE TS
ON TI.??? = TS.???
C'est tout. Comme tu n'as pas décrit ni tes tables, ni tes colonnes difficile de t'en dire plus.
A lire :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5.2
A +
Merci de toute contribution.
Merci d'avoir lu jusque là.
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Bonsoir et merci beaucoup Fred pour ta réponse,Oui, la notion de champ n'existe pas...
...http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
Merci de ce premier éclaircissement.
Mais le quatrième est celui que j'ai préféré :Est ce faisable ?
Tout à fait.
Ton "Attention" m'a bien permi de comprendre la structure de ton exemple. "INNER JOIN inserted I"
Du coup ton exemple est pour moi très explicite (pour être honnête avec Philippe T, ma lecture de sa contribution m'avait déjà bien
dégrossi) mais franchement...
du coup j'ai fait un autre Trigger sur ta base et la syntaxe a été accepter !!!! Et je suis même arrivé à mettre ma table source !!!
Par contre
1) Mon Trigger ne rempli pas ma colonne :-(.
2) tu ne m'as pas mis de close Where dans ton exemple, j'en ai fait de même. Du coup, est ce pour cela ? Toute validation d'ajout
d'enregistrement est long... Ne mettrait il pas à jour tout les lignes existantes...
Quoi que, non ? l'absence de close Where, doit plutôt le perturber pour savoir quel ligne de la table source il doit prendre en
compte ?
J'ai oublié une précision importante j'ai une relation mère fille entre source et cible.
Je veux en effet (je pense que c'est bateau) mettre à jour des colonnes de la table "lignes"(cible) à partir d'une colonne de sa
table "en tête"(source).
Je cherche encore, et en tout cas merci encore
Merci d'avoir lu jusque là.
"Fred BROUARD" a écrit dans le message de news: %Bonjour,
YDN a écrit:Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
Oui, la notion de champ n'existe pas en base de données car une base ne procède pas à la saisie. or le champ est une notion
visuelle. En matière de SGBDR on parle ligne (et non enregistrement) et colonne (et non champ).
A lire sur le sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Tout à fait. Si une insertion, modif ou suppression concerne 100 000 lignes, le trigger ne se déclenche qu'une seule fois.
Autrement dit le trigger se déclenche sur l'ordre SQL concerné (INSERT, UPDATE, DELETE) que cet ordre concerne zéro lignes, une
seule ou de nombreuses lignes.Ce qui n'est pas mon cas ici.
Aucune importance car dans l'avenir ce peut être le cas.Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
Tout à fait.
Attention : dans le trigger, les données impactées figurent dans une pseudo table de nom "inserted" ou "deleted", suivant que l'on
procéde par ajout ou modif (inserted) ou bien par suppression (deleted). Il faut donc utiliser cette pseudo table dans le corps du
trigger.si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Voici un modèle pour ce faire :
CREATE TRIGGER TRG_POUR_FAIRE_CECI
ON TABLE_IMPACTEE
FOR INSERT
AS
UPDATE TABLE_IMPACTEE
SET MA_COLONNE_A_METTRE_A_JOUR = TS.MA_COLONNE_SOURCE
FROM TABLE_IMPACTEE TI
INNER JOIN inserted I
ON TI.COLONNE_CLEF = I.COLONNE_CLEF
INNER JOIN TABLE_SOURCE TS
ON TI.??? = TS.???
C'est tout. Comme tu n'as pas décrit ni tes tables, ni tes colonnes difficile de t'en dire plus.
A lire :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5.2
A +Merci de toute contribution.
Merci d'avoir lu jusque là.
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
ce qui remplace le filtre Where c'est la jointure entre la table inserted et la table cible. Si 3 lignes sont mise à jour
simultanément alors inserted contiendra ces trois lignes et la jointure fera que la table cible ne sera impactée que pour ces 3
lignes là.
A +
YDN a écrit:Bonsoir et merci beaucoup Fred pour ta réponse,Oui, la notion de champ n'existe pas...
...http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
Merci de ce premier éclaircissement.
Mais le quatrième est celui que j'ai préféré :Est ce faisable ?
Tout à fait.
Ton "Attention" m'a bien permi de comprendre la structure de ton exemple. "INNER JOIN inserted I"
Du coup ton exemple est pour moi très explicite (pour être honnête avec Philippe T, ma lecture de sa contribution m'avait déjà
bien dégrossi) mais franchement...
du coup j'ai fait un autre Trigger sur ta base et la syntaxe a été accepter !!!! Et je suis même arrivé à mettre ma table source
!!!
Par contre
1) Mon Trigger ne rempli pas ma colonne :-(.
2) tu ne m'as pas mis de close Where dans ton exemple, j'en ai fait de même. Du coup, est ce pour cela ? Toute validation d'ajout
d'enregistrement est long... Ne mettrait il pas à jour tout les lignes existantes...
Quoi que, non ? l'absence de close Where, doit plutôt le perturber pour savoir quel ligne de la table source il doit prendre en
compte ?
J'ai oublié une précision importante j'ai une relation mère fille entre source et cible.
Je veux en effet (je pense que c'est bateau) mettre à jour des colonnes de la table "lignes"(cible) à partir d'une colonne de sa
table "en tête"(source).
Je cherche encore, et en tout cas merci encore
Merci d'avoir lu jusque là.
"Fred BROUARD" a écrit dans le message de news: %Bonjour,
YDN a écrit:Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
Oui, la notion de champ n'existe pas en base de données car une base ne procède pas à la saisie. or le champ est une notion
visuelle. En matière de SGBDR on parle ligne (et non enregistrement) et colonne (et non champ).
A lire sur le sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Tout à fait. Si une insertion, modif ou suppression concerne 100 000 lignes, le trigger ne se déclenche qu'une seule fois.
Autrement dit le trigger se déclenche sur l'ordre SQL concerné (INSERT, UPDATE, DELETE) que cet ordre concerne zéro lignes, une
seule ou de nombreuses lignes.Ce qui n'est pas mon cas ici.
Aucune importance car dans l'avenir ce peut être le cas.Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
Tout à fait.
Attention : dans le trigger, les données impactées figurent dans une pseudo table de nom "inserted" ou "deleted", suivant que
l'on procéde par ajout ou modif (inserted) ou bien par suppression (deleted). Il faut donc utiliser cette pseudo table dans le
corps du trigger.si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Voici un modèle pour ce faire :
CREATE TRIGGER TRG_POUR_FAIRE_CECI
ON TABLE_IMPACTEE
FOR INSERT
AS
UPDATE TABLE_IMPACTEE
SET MA_COLONNE_A_METTRE_A_JOUR = TS.MA_COLONNE_SOURCE
FROM TABLE_IMPACTEE TI
INNER JOIN inserted I
ON TI.COLONNE_CLEF = I.COLONNE_CLEF
INNER JOIN TABLE_SOURCE TS
ON TI.??? = TS.???
C'est tout. Comme tu n'as pas décrit ni tes tables, ni tes colonnes difficile de t'en dire plus.
A lire :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5.2
A +Merci de toute contribution.
Merci d'avoir lu jusque là.
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
ce qui remplace le filtre Where c'est la jointure entre la table inserted et la table cible. Si 3 lignes sont mise à jour
simultanément alors inserted contiendra ces trois lignes et la jointure fera que la table cible ne sera impactée que pour ces 3
lignes là.
A +
YDN a écrit:
Bonsoir et merci beaucoup Fred pour ta réponse,
Oui, la notion de champ n'existe pas...
...http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
Merci de ce premier éclaircissement.
Mais le quatrième est celui que j'ai préféré :
Est ce faisable ?
Tout à fait.
Ton "Attention" m'a bien permi de comprendre la structure de ton exemple. "INNER JOIN inserted I"
Du coup ton exemple est pour moi très explicite (pour être honnête avec Philippe T, ma lecture de sa contribution m'avait déjà
bien dégrossi) mais franchement...
du coup j'ai fait un autre Trigger sur ta base et la syntaxe a été accepter !!!! Et je suis même arrivé à mettre ma table source
!!!
Par contre
1) Mon Trigger ne rempli pas ma colonne :-(.
2) tu ne m'as pas mis de close Where dans ton exemple, j'en ai fait de même. Du coup, est ce pour cela ? Toute validation d'ajout
d'enregistrement est long... Ne mettrait il pas à jour tout les lignes existantes...
Quoi que, non ? l'absence de close Where, doit plutôt le perturber pour savoir quel ligne de la table source il doit prendre en
compte ?
J'ai oublié une précision importante j'ai une relation mère fille entre source et cible.
Je veux en effet (je pense que c'est bateau) mettre à jour des colonnes de la table "lignes"(cible) à partir d'une colonne de sa
table "en tête"(source).
Je cherche encore, et en tout cas merci encore
Merci d'avoir lu jusque là.
"Fred BROUARD" <brouardf@club-internet.fr> a écrit dans le message de news: %23vSFnZyaFHA.2420@TK2MSFTNGP12.phx.gbl...
Bonjour,
YDN a écrit:
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
Oui, la notion de champ n'existe pas en base de données car une base ne procède pas à la saisie. or le champ est une notion
visuelle. En matière de SGBDR on parle ligne (et non enregistrement) et colonne (et non champ).
A lire sur le sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Tout à fait. Si une insertion, modif ou suppression concerne 100 000 lignes, le trigger ne se déclenche qu'une seule fois.
Autrement dit le trigger se déclenche sur l'ordre SQL concerné (INSERT, UPDATE, DELETE) que cet ordre concerne zéro lignes, une
seule ou de nombreuses lignes.
Ce qui n'est pas mon cas ici.
Aucune importance car dans l'avenir ce peut être le cas.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
Tout à fait.
Attention : dans le trigger, les données impactées figurent dans une pseudo table de nom "inserted" ou "deleted", suivant que
l'on procéde par ajout ou modif (inserted) ou bien par suppression (deleted). Il faut donc utiliser cette pseudo table dans le
corps du trigger.
si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Voici un modèle pour ce faire :
CREATE TRIGGER TRG_POUR_FAIRE_CECI
ON TABLE_IMPACTEE
FOR INSERT
AS
UPDATE TABLE_IMPACTEE
SET MA_COLONNE_A_METTRE_A_JOUR = TS.MA_COLONNE_SOURCE
FROM TABLE_IMPACTEE TI
INNER JOIN inserted I
ON TI.COLONNE_CLEF = I.COLONNE_CLEF
INNER JOIN TABLE_SOURCE TS
ON TI.??? = TS.???
C'est tout. Comme tu n'as pas décrit ni tes tables, ni tes colonnes difficile de t'en dire plus.
A lire :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5.2
A +
Merci de toute contribution.
Merci d'avoir lu jusque là.
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
ce qui remplace le filtre Where c'est la jointure entre la table inserted et la table cible. Si 3 lignes sont mise à jour
simultanément alors inserted contiendra ces trois lignes et la jointure fera que la table cible ne sera impactée que pour ces 3
lignes là.
A +
YDN a écrit:Bonsoir et merci beaucoup Fred pour ta réponse,Oui, la notion de champ n'existe pas...
...http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2
Merci de ce premier éclaircissement.
Mais le quatrième est celui que j'ai préféré :Est ce faisable ?
Tout à fait.
Ton "Attention" m'a bien permi de comprendre la structure de ton exemple. "INNER JOIN inserted I"
Du coup ton exemple est pour moi très explicite (pour être honnête avec Philippe T, ma lecture de sa contribution m'avait déjà
bien dégrossi) mais franchement...
du coup j'ai fait un autre Trigger sur ta base et la syntaxe a été accepter !!!! Et je suis même arrivé à mettre ma table source
!!!
Par contre
1) Mon Trigger ne rempli pas ma colonne :-(.
2) tu ne m'as pas mis de close Where dans ton exemple, j'en ai fait de même. Du coup, est ce pour cela ? Toute validation d'ajout
d'enregistrement est long... Ne mettrait il pas à jour tout les lignes existantes...
Quoi que, non ? l'absence de close Where, doit plutôt le perturber pour savoir quel ligne de la table source il doit prendre en
compte ?
J'ai oublié une précision importante j'ai une relation mère fille entre source et cible.
Je veux en effet (je pense que c'est bateau) mettre à jour des colonnes de la table "lignes"(cible) à partir d'une colonne de sa
table "en tête"(source).
Je cherche encore, et en tout cas merci encore
Merci d'avoir lu jusque là.
"Fred BROUARD" a écrit dans le message de news: %Bonjour,
YDN a écrit:Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
Oui, la notion de champ n'existe pas en base de données car une base ne procède pas à la saisie. or le champ est une notion
visuelle. En matière de SGBDR on parle ligne (et non enregistrement) et colonne (et non champ).
A lire sur le sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse.
Tout à fait. Si une insertion, modif ou suppression concerne 100 000 lignes, le trigger ne se déclenche qu'une seule fois.
Autrement dit le trigger se déclenche sur l'ordre SQL concerné (INSERT, UPDATE, DELETE) que cet ordre concerne zéro lignes, une
seule ou de nombreuses lignes.Ce qui n'est pas mon cas ici.
Aucune importance car dans l'avenir ce peut être le cas.Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ?
Tout à fait.
Attention : dans le trigger, les données impactées figurent dans une pseudo table de nom "inserted" ou "deleted", suivant que
l'on procéde par ajout ou modif (inserted) ou bien par suppression (deleted). Il faut donc utiliser cette pseudo table dans le
corps du trigger.si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Voici un modèle pour ce faire :
CREATE TRIGGER TRG_POUR_FAIRE_CECI
ON TABLE_IMPACTEE
FOR INSERT
AS
UPDATE TABLE_IMPACTEE
SET MA_COLONNE_A_METTRE_A_JOUR = TS.MA_COLONNE_SOURCE
FROM TABLE_IMPACTEE TI
INNER JOIN inserted I
ON TI.COLONNE_CLEF = I.COLONNE_CLEF
INNER JOIN TABLE_SOURCE TS
ON TI.??? = TS.???
C'est tout. Comme tu n'as pas décrit ni tes tables, ni tes colonnes difficile de t'en dire plus.
A lire :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5.2
A +Merci de toute contribution.
Merci d'avoir lu jusque là.
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Bonsoir et merci beaucoup pour ta réponse,Oui cela va fonctionner
Déjà rien que pour ça !
Oui alors j'avais pas envisager effectivement la nécessité de la clause SELECT dont je ne me suis pas senti tout de suite
capable...
J'ai donc troqué peut être peu intelligement pour un
SELECT @MyDefValue="TestSaisieTrigger"
En tout cas la vérification de syntaxe ne bloque pas dessus mais par contre elle bloque sur la partieINNER JOIN inserted i ON MaTableSource.ID = i.ID
en indiquant "syntaxe incorrecte vers 'CeQueJeMetsCommeId'" A noter j'ai cru comprendre que ID est le nom de la colonne (que
j'appelle clé au sens BD Access).
Je ne comprends pas ce bloquage, je cherche encore mais pas ce soir.
J'espérais revenir avec un résultat positif, en tout cas merci.
Merci d'avoir lu jusque là.
"Philippe T [MS]" a écrit dans le message de news:Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"YDN" wrote in message news:%Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonsoir et merci beaucoup pour ta réponse,
Oui cela va fonctionner
Déjà rien que pour ça !
Oui alors j'avais pas envisager effectivement la nécessité de la clause SELECT dont je ne me suis pas senti tout de suite
capable...
J'ai donc troqué peut être peu intelligement pour un
SELECT @MyDefValue="TestSaisieTrigger"
En tout cas la vérification de syntaxe ne bloque pas dessus mais par contre elle bloque sur la partie
INNER JOIN inserted i ON MaTableSource.ID = i.ID
en indiquant "syntaxe incorrecte vers 'CeQueJeMetsCommeId'" A noter j'ai cru comprendre que ID est le nom de la colonne (que
j'appelle clé au sens BD Access).
Je ne comprends pas ce bloquage, je cherche encore mais pas ce soir.
J'espérais revenir avec un résultat positif, en tout cas merci.
Merci d'avoir lu jusque là.
"Philippe T [MS]" <ptrotin@online.microsoft.com> a écrit dans le message de news: OuzPZWyaFHA.612@TK2MSFTNGP12.phx.gbl...
Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"YDN" <fgargamel@hotmail.com> wrote in message news:%23tJRhjtaFHA.3488@tk2msftngp13.phx.gbl...
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonsoir et merci beaucoup pour ta réponse,Oui cela va fonctionner
Déjà rien que pour ça !
Oui alors j'avais pas envisager effectivement la nécessité de la clause SELECT dont je ne me suis pas senti tout de suite
capable...
J'ai donc troqué peut être peu intelligement pour un
SELECT @MyDefValue="TestSaisieTrigger"
En tout cas la vérification de syntaxe ne bloque pas dessus mais par contre elle bloque sur la partieINNER JOIN inserted i ON MaTableSource.ID = i.ID
en indiquant "syntaxe incorrecte vers 'CeQueJeMetsCommeId'" A noter j'ai cru comprendre que ID est le nom de la colonne (que
j'appelle clé au sens BD Access).
Je ne comprends pas ce bloquage, je cherche encore mais pas ce soir.
J'espérais revenir avec un résultat positif, en tout cas merci.
Merci d'avoir lu jusque là.
"Philippe T [MS]" a écrit dans le message de news:Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"YDN" wrote in message news:%Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une colonne dans la terminologie ce me semble) prenne une valeur
issu d'une autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en ajout d'enregistrement, si l'utilisateur veux ensuite
modifier les valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste, trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonsoir à tous,
Ma question est un peu la suite de mes problèmes persistant d'hier.
Existe t il, sous sql server, un outils d'analyse permettant de savoir
quels sont les trigger en cours d'execution. Et puis peut être
l'interpretation, résultat de leurs différentes commandes.
J'ai vu l'analyseur de requête, le générateur de profil, mais je n'y ai
rien trouvé d'approchant.
Merci de toute contribution.
Merci d'avoir lu jusque là.
"YDN" a écrit dans le message de news:
%23RKa%Bonsoir et merci beaucoup pour ta réponse,Oui cela va fonctionner
Déjà rien que pour ça !
Oui alors j'avais pas envisager effectivement la nécessité de la clause
SELECT dont je ne me suis pas senti tout de suite capable...
J'ai donc troqué peut être peu intelligement pour un
SELECT @MyDefValue="TestSaisieTrigger"
En tout cas la vérification de syntaxe ne bloque pas dessus mais par
contre elle bloque sur la partieINNER JOIN inserted i ON MaTableSource.ID = i.ID
en indiquant "syntaxe incorrecte vers 'CeQueJeMetsCommeId'" A noter j'ai
cru comprendre que ID est le nom de la colonne (que j'appelle clé au sens
BD Access).
Je ne comprends pas ce bloquage, je cherche encore mais pas ce soir.
J'espérais revenir avec un résultat positif, en tout cas merci.
Merci d'avoir lu jusque là.
"Philippe T [MS]" a écrit dans le message
de news:Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les
enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"YDN" wrote in message
news:%Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je
veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une
colonne dans la terminologie ce me semble) prenne une valeur issu d'une
autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des
enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en
ajout d'enregistrement, si l'utilisateur veux ensuite modifier les
valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur
ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est
faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste,
trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonsoir à tous,
Ma question est un peu la suite de mes problèmes persistant d'hier.
Existe t il, sous sql server, un outils d'analyse permettant de savoir
quels sont les trigger en cours d'execution. Et puis peut être
l'interpretation, résultat de leurs différentes commandes.
J'ai vu l'analyseur de requête, le générateur de profil, mais je n'y ai
rien trouvé d'approchant.
Merci de toute contribution.
Merci d'avoir lu jusque là.
"YDN" <fgargamel@hotmail.com> a écrit dans le message de news:
%23RKa%2345aFHA.2356@TK2MSFTNGP10.phx.gbl...
Bonsoir et merci beaucoup pour ta réponse,
Oui cela va fonctionner
Déjà rien que pour ça !
Oui alors j'avais pas envisager effectivement la nécessité de la clause
SELECT dont je ne me suis pas senti tout de suite capable...
J'ai donc troqué peut être peu intelligement pour un
SELECT @MyDefValue="TestSaisieTrigger"
En tout cas la vérification de syntaxe ne bloque pas dessus mais par
contre elle bloque sur la partie
INNER JOIN inserted i ON MaTableSource.ID = i.ID
en indiquant "syntaxe incorrecte vers 'CeQueJeMetsCommeId'" A noter j'ai
cru comprendre que ID est le nom de la colonne (que j'appelle clé au sens
BD Access).
Je ne comprends pas ce bloquage, je cherche encore mais pas ce soir.
J'espérais revenir avec un résultat positif, en tout cas merci.
Merci d'avoir lu jusque là.
"Philippe T [MS]" <ptrotin@online.microsoft.com> a écrit dans le message
de news: OuzPZWyaFHA.612@TK2MSFTNGP12.phx.gbl...
Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les
enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"YDN" <fgargamel@hotmail.com> wrote in message
news:%23tJRhjtaFHA.3488@tk2msftngp13.phx.gbl...
Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je
veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une
colonne dans la terminologie ce me semble) prenne une valeur issu d'une
autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des
enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en
ajout d'enregistrement, si l'utilisateur veux ensuite modifier les
valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur
ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est
faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste,
trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.
Bonsoir à tous,
Ma question est un peu la suite de mes problèmes persistant d'hier.
Existe t il, sous sql server, un outils d'analyse permettant de savoir
quels sont les trigger en cours d'execution. Et puis peut être
l'interpretation, résultat de leurs différentes commandes.
J'ai vu l'analyseur de requête, le générateur de profil, mais je n'y ai
rien trouvé d'approchant.
Merci de toute contribution.
Merci d'avoir lu jusque là.
"YDN" a écrit dans le message de news:
%23RKa%Bonsoir et merci beaucoup pour ta réponse,Oui cela va fonctionner
Déjà rien que pour ça !
Oui alors j'avais pas envisager effectivement la nécessité de la clause
SELECT dont je ne me suis pas senti tout de suite capable...
J'ai donc troqué peut être peu intelligement pour un
SELECT @MyDefValue="TestSaisieTrigger"
En tout cas la vérification de syntaxe ne bloque pas dessus mais par
contre elle bloque sur la partieINNER JOIN inserted i ON MaTableSource.ID = i.ID
en indiquant "syntaxe incorrecte vers 'CeQueJeMetsCommeId'" A noter j'ai
cru comprendre que ID est le nom de la colonne (que j'appelle clé au sens
BD Access).
Je ne comprends pas ce bloquage, je cherche encore mais pas ce soir.
J'espérais revenir avec un résultat positif, en tout cas merci.
Merci d'avoir lu jusque là.
"Philippe T [MS]" a écrit dans le message
de news:Bonjour,
Oui cela va fonctionner avec quelque chose du type :
CREATE Trigger MonDeclencheur on MaTableCible
FOR INSERT
AS
BEGIN
DECLARE @MyDefValue nvarchar(100)
SELECT @MyDefValue = MyValue FROM MyDefaultTable WHERE ...
UPDATE MaTableCible
SET MonChampAMettreAjour = @MyDefValue
FROM MaTableSource
INNER JOIN inserted i ON MaTableSource.ID = i.ID
END
Utiliser la table inserted dans le trigger. Elle comprend les
enregistrements qui ont été insérés.
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"YDN" wrote in message
news:%Bonjour à tous,
Je me pose une question sur ce que sont les Trigger et si ce que je
veux faire est réalisable avec cet outils.
En fait je souhaiterai qu'en ajout d'enregistrement un champ (une
colonne dans la terminologie ce me semble) prenne une valeur issu d'une
autre table.
J'ai peur d'avoir compris ici que les trigger sont là pour traiter des
enregistrements en masse. Ce qui n'est pas mon cas ici.
Je veux juste aider à la saisie en mettant une valeur par défaut en
ajout d'enregistrement, si l'utilisateur veux ensuite modifier les
valeurs il le pourra. Donc le Trigger ne doit se déclencher que sur
ajout.
Est ce faisable ? si oui j'imagine que la structure est de l'ordre de :
CREATE Trigger MonDeclencheur on MaTableCible
For Insert
As
---
Là je sèche complètement sur la syntaxe si mon cas de figure est
faisable je pense à un truc du style :
Select MonChampAMettreAjour=MaTableSource.MonChampSource
Insert Into MaTableCible.
Mais d'abord la syntaxe n'est pas accepté, ça me parait, pas juste,
trop simple...
Merci de toute contribution.
Merci d'avoir lu jusque là.