Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1568 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Déplacement/copie de fichier dans un trigger SQL Server

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Déplacement/copie de fichier dans un trigger SQL Server

n°1484830
molarisapa
Posté le 01-12-2006 à 11:39:44  profilanswer
 

Bonjour,
 
Je voudrais savoir s'il est possible de déplacer, copier, supprimer des fichiers sur le disque (OS windows), dans un trigger (déclencheur) SQL Serveur?
 
Merci de votre aide  :jap:  
 
Olivier

mood
Publicité
Posté le 01-12-2006 à 11:39:44  profilanswer
 

n°1484904
MagicBuzz
Posté le 01-12-2006 à 13:37:53  profilanswer
 

oui c'est possible.
je suis en train de voir pour te donner un exemple

n°1484920
molarisapa
Posté le 01-12-2006 à 13:51:21  profilanswer
 

ah!! cool
 
la je vais regarder du coté de xp_cmdshell
 
mais je suis preneur de l'exemple  :bounce:  


Message édité par molarisapa le 01-12-2006 à 13:51:44
n°1484925
MagicBuzz
Posté le 01-12-2006 à 14:01:59  profilanswer
 

putain de bordel de merde de chiotte :o
 
chais pas ce qu'ils ont au boulot aujourd'hui, mais ils ont clairement décidé de me casser les nuts jusqu'au bout :o
 
chuis arrivé à la bourre, évidement, depuis 6 mois aucun serveur n'avait planté, ben à tous les serveurs étaient en rade...
ensuite je dois récupérer des données d'un site distant, évidement le modem 56k à l'autre bout était sur une ligne en dérangement... perdu deux heures à leur faire brancher sur une autre prise.
ensuite on m'a fait fare des modifs dans la base hier, ils se sont apperçu qu'ils s'étaient planté, du coup y'a plus rien qui marche, j'ai encore passé un temps pas croyable à tout remettre d'aplomb.
maintenant c'est un extract qu'à pas les bons prix, et faut que je me recoltine à la main les 7000 lignes d'un tableau excel pour rajouter la bonne colonne
sans parler du soft de backup qui est parti en live cette nuit et y'a pas moyen de contacter le support
et des putains de requêtes qui durent 2 heures à éxécuter ce soir avant de partir
 
bordel :o
 
bon, dès que j'ai un peu de temps, je me repenche sur ton problème (j'y suis presque à vrai dire)

n°1484926
MagicBuzz
Posté le 01-12-2006 à 14:02:23  profilanswer
 

ps : c'est effectivement avec xp_cmdshell que je te fais l'exemple

n°1484927
MagicBuzz
Posté le 01-12-2006 à 14:04:38  profilanswer
 

rhâââââaaaaa putain !
pis j'avais pas ouvert ma messagerie, j'ai au moins 30 mails de problèmes à régler de toute urgence :cry:
(et dire que j'ai absolument rien à faire depuis 15 jours... y'a vraiment des jours comme ça :/)


Message édité par MagicBuzz le 01-12-2006 à 14:05:01
n°1485014
MagicBuzz
Posté le 01-12-2006 à 15:28:32  profilanswer
 

Voilà.
 
Alors, le script de test SQL :
 


create table fichier (nom varchar(255) primary key);
go
 
CREATE TRIGGER trg_fichier_ins  
ON fichier  
INSTEAD OF INSERT
AS
  declare @new_nom as varchar(50);
  declare @shell as varchar(8000);
  declare ins_cur cursor FAST_FORWARD for (select nom from inserted);
BEGIN
  open ins_cur;
  fetch next from ins_cur into @new_nom;
 
  while @@FETCH_STATUS = 0
  begin
    if @new_nom = 'model.txt'
    begin
      RAISERROR('model.txt : nom de fichier réservé', 16, 1)
    end    
    else
    begin
      insert into fichier (nom) values (@new_nom);
      set @shell = 'copy c:\in\trigger\model.txt c:\in\trigger\' + @new_nom;
      exec master..xp_cmdshell @shell, no_output;
    end
    fetch next from ins_cur into @new_nom;
  end
END;
go
 
CREATE TRIGGER trg_fichier_del  
ON fichier  
INSTEAD OF DELETE
AS
  declare @old_nom as varchar(50);
  declare @shell as varchar(8000);
  declare del_cur cursor FAST_FORWARD for (select nom from deleted);
BEGIN
  open del_cur;
  fetch next from del_cur into @old_nom;
 
  while @@FETCH_STATUS = 0
  begin
    delete fichier where nom = @old_nom;
    set @shell = 'del c:\in\trigger\' + @old_nom;
    exec master..xp_cmdshell @shell, no_output;
    fetch next from del_cur into @old_nom;
  end
END;
go
 
CREATE TRIGGER trg_fichier_upd
ON fichier  
INSTEAD OF UPDATE
AS
  declare @ins_nom as varchar(50);
  declare @del_nom as varchar(50);
  declare @shell as varchar(8000);
  declare ins_cur cursor FAST_FORWARD for (select nom from inserted);
  declare del_cur cursor FAST_FORWARD for (select nom from deleted);
BEGIN
  open ins_cur;
  open del_cur;
  fetch next from ins_cur into @ins_nom;
  fetch next from del_cur into @del_nom;
 
  while @@FETCH_STATUS = 0
  begin
    if @ins_nom = 'model.txt'
    begin
      RAISERROR('model.txt : nom de fichier réservé', 16, 1)
    end    
    else
    begin
      update fichier set nom = @ins_nom where nom = @del_nom;
      set @shell = 'move c:\in\trigger\' + @del_nom + ' c:\in\trigger\' + @ins_nom;
      exec master..xp_cmdshell @shell, no_output;
    end
    fetch next from ins_cur into @ins_nom;
    fetch next from del_cur into @del_nom;
  end
END;
go
 
insert into fichier (nom) values ('test.txt');
insert into fichier (nom) values ('test2.txt');
insert into fichier (nom) values ('test3.txt');
delete fichier where nom in ('test3.txt', 'test.txt');
update fichier set nom = 'toto.txt' where nom = 'test2.txt';
 
select *
from fichier;


 
Résultat :


 
(1 ligne(s) affectée(s))
 
(1 ligne(s) affectée(s))
 
(1 ligne(s) affectée(s))
 
(1 ligne(s) affectée(s))
 
(1 ligne(s) affectée(s))
 
(1 ligne(s) affectée(s))
 
(1 ligne(s) affectée(s))
 
(1 ligne(s) affectée(s))
 
(2 ligne(s) affectée(s))
 
(1 ligne(s) affectée(s))
 
(1 ligne(s) affectée(s))
nom
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
toto.txt
 
(1 ligne(s) affectée(s))


 
Avant :


C:\in\trigger>dir
 Le volume dans le lecteur C n'a pas de nom.
 Le numéro de série du volume est 14E3-DAD6
 
 Répertoire de C:\in\trigger
 
12/01/2006  12:25 PM    <REP>          .
12/01/2006  12:25 PM    <REP>          ..
12/01/2006  12:25 PM                 4 model.txt
               1 fichier(s)                4 octets
               2 Rép(s)  23,535,226,880 octets libres


 
Après :


C:\in\trigger>dir
 Le volume dans le lecteur C n'a pas de nom.
 Le numéro de série du volume est 14E3-DAD6
 
 Répertoire de C:\in\trigger
 
12/01/2006  03:18 PM    <REP>          .
12/01/2006  03:18 PM    <REP>          ..
12/01/2006  12:25 PM                 4 model.txt
12/01/2006  12:25 PM                 4 toto.txt
               2 fichier(s)                8 octets
               2 Rép(s)  23,524,823,040 octets libres


 
Pour pouvoir executer xp_cmd_shell :
http://magicbuzz.multimania.com/files/cmd_shell1.png
 
http://magicbuzz.multimania.com/files/cmd_shell2.png
 
http://magicbuzz.multimania.com/files/cmd_shell3.png

n°1485018
MagicBuzz
Posté le 01-12-2006 à 15:29:31  profilanswer
 

bon, j'y retourne, encore une folle qui a tout pété son pc :o

n°1485176
molarisapa
Posté le 01-12-2006 à 18:11:43  profilanswer
 

Enorme  :love:  
 
Bon je vais regarder tout ca attentivement
 
Merci l'ami
 
 :bounce:  :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Déplacement/copie de fichier dans un trigger SQL Server

 

Sujets relatifs
Parser un fichier XML en PHPUpload phot dans un fichier html
Imprimer un fichier PDF[ORACLE-PL/SQL] [Résolu] Trigger et appel de procédure externe
[FLASH] GetUrl sur fichier .zip ne marche pas avec Internet explorerAppeler un fichier php dans un autre
retourner dans une chaine un fichier PHP interprétéLire des valeurs hexadecimales(negatives) dans un fichier
Lecture de fichier 
Plus de sujets relatifs à : Déplacement/copie de fichier dans un trigger SQL Server


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR