[SQL Server][Gestion de fichier] Ouvrir lire créer un fichier via SQL?

Ouvrir lire créer un fichier via SQL? [SQL Server][Gestion de fichier] - SQL/NoSQL - Programmation

Marsh Posté le 08-07-2007 à 15:26:37    

Hello,
 
J'ai besoin de créer un petit module qui se lancera à heure régulière pour executer une requete et créer un fichier, voir plus tard d'executer une commande pour envoyer ce fichier a un serveur.
 
Ce meme petit module devra ensuite etre capable de lire le fichier accusé réception.
 
Le fichier a créer est tout simplement un fichier créé en retour d'un select, donc pas grand chose de particulier.
 
Mais voila, je ne vois pas comment via Transact SQL il est possible de creer lire ouvrir un fichier texte ?
Si ce n'est pas possible, alors comment faire ? Créer par exemple une appli en ligne de commande qui sera exécutée régulièrement ? c'est la seule alternative que je vois, mais l'on m'a soutenu que transact SQL etait capable de faire tout ca tout seul.
 
Comment pourrai je eventuellement utiliser les DTS de sql server ?
 
Merci.

Reply

Marsh Posté le 08-07-2007 à 15:26:37   

Reply

Marsh Posté le 08-07-2007 à 18:29:49    

tu lances un SQL+ depuis un batch, et tu récupère la sortie.
ou alors tu lances toujours un SQL+ depuis un batch, le sql lancé utilise la commande SPOOL afin d'écrire le résultat dans un fichier.
 
mais évite d'écrire dans un fichier à partir du SQL.
 
effectivement, SQL+, tu peux le lancer de n'importe où, et récupérer un fichier de sortie en local, sans te soucier d'éventuels problèmes de droits.
alors que si c'est SQL qui écrit dans un fichier, tu seras limité au serveur à un chemin sur un lecteur réseau, et en plus tu t'exploses à des problèmes de droits (les process d'Oracle doivent tourner avec un compte local restreint)

Reply

Marsh Posté le 08-07-2007 à 18:47:18    

merci ;).
 
Mais bon la redirection du flux de sql +, implique un batch, et implique une tache planifié ailleurs que dans sql serveur. Si c'est le cas je ferai une appli console.
 
Par contre si y a un moyen d'ecrire et lire un fichier avec le sql dans une procédure stockée, cela m'interesserait plus dans un premier temps, malgré les problèmes de droit que cela peut poser.
 
Mais je ne vois nul part de package a integre pour faire cela, ou alors il faut que j'écrive dans un autre script ?
 
Donner les droits a l'utilisateurs qui lance sql serveur ca me derange pas trop.
 
Dans sql serveur 2005 il est possible d'avoir des proc stock en .net, ca pourrait le faire j'imagine encore plus facilement, non ?

Reply

Marsh Posté le 08-07-2007 à 21:09:02    

Arf, oui, tu parlais de transact sql, donc de sql server (mélangé avec pl sql d'oracle). m'enfin le problème reste le même.
 
isql.exe et osql.exe permettent tous deux d'exécuter des commandes sql et de loguer le résultat dans un fichier de spool.
 
sinon, effectivement je ne vois rien qui te permette de faire ça sans SQL Server 2005.
 
a la limite, à grand coups de bidouilles avec xp_cmdshell, mais il est désactivé par défaut, car bien trop dangereux.

Reply

Marsh Posté le 08-07-2007 à 23:15:17    

MagicBuzz a écrit :

Arf, oui, tu parlais de transact sql, donc de sql server (mélangé avec pl sql d'oracle). m'enfin le problème reste le même.
 
isql.exe et osql.exe permettent tous deux d'exécuter des commandes sql et de loguer le résultat dans un fichier de spool.
 
sinon, effectivement je ne vois rien qui te permette de faire ça sans SQL Server 2005.
 
a la limite, à grand coups de bidouilles avec xp_cmdshell, mais il est désactivé par défaut, car bien trop dangereux.


ca pour l'invité ligne de commande je comprends tres bien que ce soit SQL+ ou autre, mais je n'aime pas trop cette soluce car si c'est pour balancer une ligne de commande je prefere autant créer une application .net que je lancerai via un batch. Et comme tu dis il y a xp_cmdshell, mais d'apres ce que j'ai compris en cas de plantage c'est tout le server qui plante, et ca euh je pense que si ca arrive j'ai le big boss sur le dos 2 minutes apres :o.

Reply

Marsh Posté le 09-07-2007 à 09:33:25    

Nan, mais très franchement, des bat en ligne de commande c'est loin d'être la mort :o
 
Au pire, effectivement, tu peux même te faire une table qui contient le nom des scripts à lancer, et exécuter ces derniers à l'aide d'un xp_cmdshell.
 
Faire un prog .NET juste pour effectuer un extract sous forme de fichier texte d'une requête, c'est une perte de temps, et tu ne gagneras rien niveau fonctionalités.
 
N'aie pas peur des *.bat, c'est monnaie courante. Suffit de voir tout le bordel que les admins collent dans le cron d'un Unix pour se rendre compte que c'est au contraire une solution à la fois courante et efficace.
 
Les jobs de SQL Server doivent se limiter à des oppérations uniquement au niveau de la base (maintenance, backups, etc.).

Reply

Marsh Posté le 09-07-2007 à 10:07:31    

et t'en penses quoi des DTS ?
 
Bein c'est pas un simple extract, y a une mise en forme et derriere il y a un traitement d'un fichier résultat.
Donc si je me fais le fichier a envoyer puis le fichier résultat je vais pas l'écrire 2 progs avec deux langages différents.
 
Mais sinon oui j'admet les bat et autre commande du genre bein c'est pas mon trip, les admins c'est leur dada sûrement mais je suis pas admin ;). Enfin je vais explorer cette solution également.

Reply

Marsh Posté le 09-07-2007 à 11:01:23    

En lot DTS aussi tu dois effectivement pouvoir faire un extract.
 
Par contre ça fait une éternité que j'y ai pas touché vu que j'utilise SQL Server Express, et qu'il n'a pas le module pour faire des DTS ;)

Reply

Marsh Posté le 22-08-2007 à 15:42:57    

bonjour,  
j'utilise des lots dts, chaque jour, pour exporter des données dans des fichiers, et je voudrais que chaque fichier prenne la date du jour comme nom
 
Comment faire?
 
dans le wizard d'export DTS, on peut seulement lui dire un nom de fichier

Reply

Marsh Posté le 22-08-2007 à 16:00:11    

Bein en fait j'ai utilisé xp_cmdshell :(, pas le choix et déjà utilisé ici.
Donc je fais avec et la tu spécifies le nom que tu veux.

Reply

Sujets relatifs:

Leave a Replay

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