[RESOLU][SQL] Recuperer une donnee qui vient d'etre updaté

Recuperer une donnee qui vient d'etre updaté [RESOLU][SQL] - SQL/NoSQL - Programmation

Marsh Posté le 18-05-2004 à 17:29:54    

Bonjour.  
En fait je lance un trigger sur l'update d'une champ d'une table
et je me demande comment récupérer un autre la valeur d'un autre champ mais qui correspont à la même ligne de ce celui qui vient de se faire "updaté".
Merci d'avance


Message édité par cixen le 18-05-2004 à 18:22:05
Reply

Marsh Posté le 18-05-2004 à 17:29:54   

Reply

Marsh Posté le 18-05-2004 à 17:42:14    

Tu dois pouvoir retrouver facilement l'identifiant de la ligne updaté, non  :??:  
 
et pis, c'est qu'elle base : Oracle ?

Reply

Marsh Posté le 18-05-2004 à 18:21:47    

C'est une base SQL Server, mais si tu veux il faut récupérer les infos de la ligne qui vient d'être updaté.
J'ai trouvé la soluce. Il suffit de rechercer les infos dans la table inserted ou deleted car lors d'un update on fait les 2 opérations.  
Donc on déclare une variable du type voulu et après on fait :
 

Code :
  1. SELECT @var = Champ FROM inserted


 
voilà c'est tout con et en plus c'est indiqué dans l'aide... Mea culpa

Reply

Marsh Posté le 30-06-2005 à 10:15:02    

bonjour,
 
je dois faire la meme chose que toi, mais la seule différence c que je dois mettre le contenu du résultat dans un fichier.
 
voilà mon trigger qui fonctionne tres bien mais sans bcp
 
quand j'utilise le bcp pour mettre le résultat dans un fichier, il me dit qu'il ne trouve pas la table inserted, normal c une table logique !!
 
comment je peux faire pour lui indiquer l'em placement de cette table inserted ?
tempdb.inserted marche pas  :??:  
temp.inserted marche pas non plus  :(  
 
create trigger test on client
for update
as
EXEC master.dbo.xp_cmdshell ' bcp "select * from inserted for xml auto" queryout c:\toto.xml -c'

Reply

Marsh Posté le 30-06-2005 à 10:22:55    

Un bcp dans un trigger  [:wam]
T'es vraiment obligé ?  t'as pas d'autre choix ?
J'ose pas imaginer ce que ca peut donner sur un appli "transactionnelle" lourde  :/
 
EDIT : Et il faut pas s'assurer que tu génères un nom de fichier unique à chaque fois ?


Message édité par Zzozo le 30-06-2005 à 10:23:36
Reply

Marsh Posté le 30-06-2005 à 10:36:54    

la gestion du nom je m'en charge
 
mais je suis obligé de générer un xml qui contient le nouveau record.
 
comment tu ferais toi ?
mieux que le bcp ? et surtout comment accéder à cette table inserted ?

Reply

Marsh Posté le 30-06-2005 à 10:40:50    

nadass a écrit :

la gestion du nom je m'en charge
 
mais je suis obligé de générer un xml qui contient le nouveau record.
 
comment tu ferais toi ?
mieux que le bcp ? et surtout comment accéder à cette table inserted ?


Le pb c'est pas le bcp en lui même, mas plutot l'utilisation du bcp dans le trigger, AMHA
Tu peux pas avoir un processus différent de ton SGBDR, s'exécutant à intervalles réguliers et faisant les bcp dont tu as besoin (ce serait donc un programme client de ton SGBDR) ?

Reply

Marsh Posté le 30-06-2005 à 10:42:52    

y n'a pas beaucoup de modification donc je penses que cela n'impactera pas la db.
 
mais mon pb c justement de faire reference dans le bcp, essai de faire une test chez toi tu verras que la table inserted dans le bcp n'est pas reconnue

Reply

Marsh Posté le 30-06-2005 à 10:49:13    

nadass a écrit :

y n'a pas beaucoup de modification donc je penses que cela n'impactera pas la db.
 
mais mon pb c justement de faire reference dans le bcp, essai de faire une test chez toi tu verras que la table inserted dans le bcp n'est pas reconnue


 
Mais ça je le sais que tu peux pas manipuler 'inerted' & co comme tu veux, et pour cause ...
La question à se poser est plutot "As tu vraiment besoin de générer des fichiers de façon absolument synchrone avec toute modification dans cette table ?"
 
Enfin bon, si tu as pas bcp de modifications ... (j'espère que tu es sur de toi, parce si un jour qqun s'amuse à faire des gros update par batch, par exe., dans cette table, ça va être marrant niveau temps d'execution je pense ... )


Message édité par Zzozo le 30-06-2005 à 10:49:47
Reply

Marsh Posté le 30-06-2005 à 10:50:52    

C'est quoi la volumétrie de cette fameuse table d'ailleurs ?
Peut elle être "chargée" à coup de "bcp in" de temps en temps ?

Reply

Marsh Posté le 30-06-2005 à 10:50:52   

Reply

Marsh Posté le 30-06-2005 à 14:26:26    

Zzozo tu pourrais me dire comment utiliser la table inserted dans un bcp stp
ca m'aiderait beaucoup

Reply

Marsh Posté le 30-06-2005 à 17:01:04    

Zzozo si tu connais la reponse tu pourrais m'aider ?

Reply

Marsh Posté le 30-06-2005 à 17:29:11    

inserted, updated et deleted ne sont pas accessibles en dehors des triggers correspondants ...


---------------
« Ce qui ne vous tue pas vous rend plus fort » F. Nietzsche | « Vise_ la Lune. Si tu rates, au pire, t'es dans la merde » Un poète disparu dans le cercle
Reply

Marsh Posté le 30-06-2005 à 23:50:42    

declare @cmd varchar(255)
select @cmd = 'bcp "select ' + inserted.val1 + ', ' + ... + ' for xml auto" queryout c:\toto.xml -c'
EXEC master.dbo.xp_cmdshell @cmd
 
Ceci dit, je trouve ça très moyen... D'autant plus qu'il y a une fonctionsystème qui permet déjà d'écrire le contenu d'une requête dans un fichier XML il me semble...

Reply

Marsh Posté le 01-07-2005 à 10:37:02    

Arjuna a écrit :

declare @cmd varchar(255)
select @cmd = 'bcp "select ' + inserted.val1 + ', ' + ... + ' for xml auto" queryout c:\toto.xml -c'
EXEC master.dbo.xp_cmdshell @cmd
 
Ceci dit, je trouve ça très moyen... D'autant plus qu'il y a une fonctionsystème qui permet déjà d'écrire le contenu d'une requête dans un fichier XML il me semble...


 
et c quoi cette commande arjuna

Reply

Marsh Posté le 01-07-2005 à 11:50:13    

J'en sais rien, je regarde. Je suis presque sûr de l'avoir trouvée l'autre jour quand je voulais justement générer des fichiers à partir de SQL Server (et ça m'avait gonflé, parcequ'il n'y a rien pour faire un fichier texte classique)

Reply

Marsh Posté le 01-07-2005 à 11:54:14    

arjuna g un pb avec ton code dans le trigger, il ne reconnait pas les +
 
inserted.val1 c'est quoi ?

Reply

Marsh Posté le 01-07-2005 à 15:53:35    

tu peux pas faire de select * dans la chaîne, donc il faut prendre tous les champs 1 à un.
sinon, ben les +, c'est pour concaténer les bouts de chaîne.
 
par contre, j'ai oublié le "from inserted" à la fin du select

Reply

Marsh Posté le 01-07-2005 à 15:53:59    

sinon, pas trouvé le truc pour écrire un fichier xml (j'ai dû rêver ^^)

Reply

Marsh Posté le 01-07-2005 à 17:29:12    

Zzozo à écrit :
inserted, updated et deleted ne sont pas accessibles en dehors des triggers correspondants ...
 
Arjunna g la meme erreur avec ton code ca fonctionne chez toi ca ?
 
declare @cmd varchar(255)
select @cmd = 'bcp "select racine from inserted ' + inserted.racine for xml auto" queryout c:\toto.xml -c'
EXEC master.dbo.xp_cmdshell @cmd  
 
il doit te dire qu'il ne reconnait pas inserted non ?

Reply

Marsh Posté le 01-07-2005 à 18:57:04    

:heink:
 
nan, ça risque pas de fonctionner :p
 

Code :
  1. declare @cmd varchar(255)
  2. select @cmd = 'bcp "select ' + racine + ' racine from inserted for xml auto" queryout c:\toto.xml -c' + from inserted
  3. EXEC master.dbo.xp_cmdshell @cmd


 
Ca doit être mieu

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed