Recuperer une donnee qui vient d'etre updaté [RESOLU][SQL] - SQL/NoSQL - Programmation
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 ?
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 :
|
voilà c'est tout con et en plus c'est indiqué dans l'aide... Mea culpa
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'
Marsh Posté le 30-06-2005 à 10:22:55
Un bcp dans un trigger
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 ?
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 ?
Marsh Posté le 30-06-2005 à 10:40:50
nadass a écrit : la gestion du nom je m'en charge |
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) ?
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
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 ç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 ... )
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 ?
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
Marsh Posté le 30-06-2005 à 17:29:11
inserted, updated et deleted ne sont pas accessibles en dehors des triggers correspondants ...
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...
Marsh Posté le 01-07-2005 à 10:37:02
Arjuna a écrit : declare @cmd varchar(255) |
et c quoi cette commande arjuna
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)
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 ?
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
Marsh Posté le 01-07-2005 à 15:53:59
sinon, pas trouvé le truc pour écrire un fichier xml (j'ai dû rêver ^^)
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 ?
Marsh Posté le 01-07-2005 à 18:57:04
nan, ça risque pas de fonctionner
Code :
|
Ca doit être mieu
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