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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Exportation SQL Server 2000

 

 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exportation SQL Server 2000

n°1109804
Fry85
Posté le 06-06-2005 à 15:24:18  profilanswer
 

Bon la je cmmence à désespérer un chouilla
 
Bref faut que j'exporte le résultat d'une requête dans n'importe koi, de préférence un fichier texte ou Excel.
Alors avec Sql Server 2000 j'ai bien la soluce du DTS mais il me sort une erreur qd j'utilise l'assistant et que je lui place ma requete. :(  
Et sinon dans la doc j'ai pas trouve cmt creer ces lot sans utiliser l'assistant, parce que je vx pouvoir les creer sur une appli Php
 
Vous auriez pas une idée .............. ???


Message édité par Fry85 le 08-06-2005 à 10:12:15
mood
Publicité
Posté le 06-06-2005 à 15:24:18  profilanswer
 

n°1109859
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-06-2005 à 15:53:13  profilanswer
 

Tu peux toujours créer le fichier depuis PHP non ?
 
Sinon, en effet, je ne sais pas comment créer un lot DTS sans passer par l'assistant, bien que ça doive être possible.
 
Sinon, pour "faciliter" le travail, si tu met en suffix à ta requête "for xml auto", alors tu récupèreras le résultat dans un fichier XML structuré, ce qui te donne un format standard d'export.

n°1109865
Fry85
Posté le 06-06-2005 à 15:54:47  profilanswer
 

Ah ,précision, faut que la procédure s'execute en étant planifier, donc php doit pas intervenir dans l'exécution mais pourquoi pas dans la planification !

n°1109878
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-06-2005 à 15:58:15  profilanswer
 

Sinon, depuis une procédure T-SQL, tu peux créer un fichier sur le disque, et même un Objet Excel, et jouer avec.
Ca reste une solution possible...

n°1109906
Fry85
Posté le 06-06-2005 à 16:08:28  profilanswer
 

Euh, c normal que la doc soit pas claire la dessus, et que j'y comprenne rien a ce qu'est marque ?
Pourtant SQL connais, mais Transact-SQL ....

n°1109930
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-06-2005 à 16:16:06  profilanswer
 

Tiens, essaie-ça, c'est pas très propre, mais ça marche :D
 

Code :
  1. drop procedure WRITE_TEXT_FILE
  2. go
  3. CREATE PROCEDURE WRITE_TEXT_FILE
  4. AS
  5. declare @cmd sysname
  6. declare @t_id numeric, @t_val numeric
  7. BEGIN
  8. EXEC master..xp_cmdshell 'del c:\sql_out.txt'
  9. DECLARE cur CURSOR
  10. FOR select id, val from tsttbl
  11. OPEN cur
  12. FETCH NEXT FROM cur
  13. INTO @t_id, @t_val
  14. WHILE @@FETCH_STATUS = 0
  15. BEGIN
  16.  SET @cmd = 'echo ' + Cast(@t_id as varchar(50)) + ';' + Cast(@t_val as varchar(50)) + ' >> c:\sql_out.txt'
  17.  EXEC master..xp_cmdshell @cmd
  18.  FETCH NEXT FROM cur
  19.  INTO @t_id, @t_val
  20. END
  21. CLOSE cur
  22. DEALLOCATE cur
  23. END
  24. GO
  25. exec WRITE_TEXT_FILE

n°1110000
Fry85
Posté le 06-06-2005 à 16:39:14  profilanswer
 

Elle existe pr toi la table tsttbl, faut que je la cree po tester ta procedure?
En fait g déjà fait du transact SQL mais je pensais pas que c'était ca, j'ai fait des procédurecomme ca par ex :
 

Code :
  1. DECLARE @totalCartes INT
  2. DECLARE @nbCartes INT
  3. DECLARE @pourcentageCartes FLOAT
  4. DECLARE @i INT
  5. DECLARE @idAtelier INT
  6. DECLARE @nomAtelier VARCHAR(45)
  7. CREATE TABLE #tmpStatCartesAteliers ( idAtelier INT NOT NULL,
  8.       nomAtelier VARCHAR(45) NOT NULL,
  9.       nbCartes INT NULL,
  10.       pourcentageCartes FLOAT NULL)
  11. SET @i = 1
  12. WHILE @i < (SELECT COUNT(idAtelier) FROM Atelier)
  13. BEGIN
  14. SET @idAtelier = @i
  15. SET @nomAtelier = (SELECT nomAtelier FROM Atelier WHERE idAtelier = @i)
  16. SET @totalCartes = (SELECT COUNT(*) AS nb FROM Carte)
  17. IF @totalCartes = 0
  18.  BEGIN
  19.  INSERT INTO #tmpStatCartesAteliers
  20.  VALUES (@idAtelier, @nomAtelier, 0, 0)
  21.  END
  22. ELSE
  23.  BEGIN
  24.  SET @nbCartes = (SELECT COUNT(*) FROM Carte WHERE idAtelierCarte = @idAtelier)
  25.  SET @pourcentageCartes = ((CONVERT(FLOAT,@nbCartes) / CONVERT(FLOAT, @totalCartes)) * 100)
  26.  INSERT INTO #tmpStatCartesAteliers
  27.  VALUES (@idAtelier, @nomAtelier, @nbCartes, @pourcentageCartes)
  28.  END
  29. SET @i = @i + 1
  30. END
  31. SELECT * FROM #tmpStatCartesAteliers
  32. DROP TABLE #tmpStatCartesAteliers

n°1110012
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-06-2005 à 16:48:18  profilanswer
 

Euh... Ouais, mais bon, là, ta procédure, elle fait pas un fichier hein ;)
 
Sinon, oui, la table tsttbl, c'est une table que j'ai créé pour faire mon test (comme son nom l'indique).
 
Mixe juste ton code avec le mien, et normalement, t'as ça en sortie (dans le fichier c:\sql_out.txt)
 

Code :
  1. 1;100
  2. 2;1
  3. 3;20


Message édité par Arjuna le 06-06-2005 à 16:48:46
n°1110035
Fry85
Posté le 06-06-2005 à 17:05:39  profilanswer
 

Ok, j'te remercie, ca a l'air de donner quelque chose, apres je sais pas si je vais pouvoir executer ce code en différé.
mais le ficheir a déjà une bonne tronche de ce que j'attendais !

n°1112229
Fry85
Posté le 08-06-2005 à 10:12:02  profilanswer
 

J'ai encore un prob avec la soluce que tu m'as filé
J'ai réussi à générer mon fichier, et je peux exécuter la procédure avec mon utilisateur principal(celui qui a créé la base).
Mais je ne souhaite pas l'employer pour faire ces traitements, j'ai créé des utilisateurs avec moins de drotis (c'est plus prudent).
Problème c'est qu'il faut des autorisations pour l'exécution de la commande xp_cmdshell sinon il me sort ceci :
 
Msg. 50001, Niveau 1, État 50001
xpsql.cpp : Erreur 87 de GetProxyAccount sur la ligne 604
 
Quels droits je dois autoriser pour pouvoir l'effectuer correctement

mood
Publicité
Posté le 08-06-2005 à 10:12:02  profilanswer
 

n°1112355
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-06-2005 à 11:20:23  profilanswer
 

OK, je reproduis ton problème :
 

Code :
  1. Serveur : Msg 229, Niveau  14, État 5, Procédure xp_cmdshell, Ligne 1
  2. Autorisation EXECUTE refusée sur l'objet 'xp_cmdshell', base de données 'master', propriétaire 'dbo'.


 
Résolu avec la démarche suivante :
- Dans la base "master", crée un user utilisant la connection de l'utilisateur de ta base
- Dans "Procédure stockées étendues", ajoute le droit "EXEC" à cet utilisateur sur la procédure "xp_cmdshell"
 
Par contre, après, chez moi ça plante plus loin :D
 

Code :
  1. Msg. 50001, Niveau 1, État 50001
  2. xpsql.cpp : Erreur 127 de GetProxyAccount sur la ligne 604


 
A creuser :D

n°1112357
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-06-2005 à 11:20:51  profilanswer
 

Argh, merde, j'avais pas lu jusqu'au bout, t'en es déjà là :sweat:

n°1112380
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-06-2005 à 11:29:57  profilanswer
 

Pfff, je trouve même pas comment on peut se connecter en tant qu'un autre utilisateur depuis une commande SQL. Ce serait à mon avis le plus simple :
dans la procédure, tu te connectes en tant que dbo
tu fais les cmdshell
tu déconnecte dbo
 
Mais je trouve pas où c'est :/
 
Ce qui est très con, c'est que si tu fait une vue sur une table.
Tu interdis la lecture de la table à un utilisateur
Tu l'authorise à lire la vue
=> Il peut voir les données de la table interdite via la vue.  
 
Mais ça n'a pas l'air de marcher pareil avec les procédures stockées :/

n°1112452
Fry85
Posté le 08-06-2005 à 11:59:36  profilanswer
 

Bon, j'ai pas pu contourner le prob
alors ce que je fais, c'est que j'exécute ces procédures lors de planifications
Comme ca c'est le créateur de ma base (qui réussit à exécuter ces procédures avec son droits sysadmin sur le serveur) qui les planifie. Après faut juste récupérer les fichiers généré et c'est bon
De toute façon c'est une procédure qu'il vaut mieux planifier pour faire les stat par mois (sans en oublier)
 
Merci qd même de ton aide
 
PS : si tu vx que ca fonctionne avec un autre utilisateur, j'ai trouvé que le moyen de lui mettre sysadmin (pas très pro tt ça)

n°1112610
Fry85
Posté le 08-06-2005 à 13:36:53  profilanswer
 

Sinon, j'ai des problmes sur la longueur du champ qui contient la commande dans xp_cmdshell
Dans la doc, c'est marque qe c'est un VARCHAR(255) ou un NVARCHAR(4000)
 
Quand j'entre ceci en parametre :  

Code :
  1. SET @dossier = 'c:\www\Statistiques\'
  2. SET @fichier = 'StatProspects_' + CONVERT(VARCHAR,GETDATE(),4) + '.txt'
  3. SET @cmd = 'echo "Nb rebuts";"% rebuts";"Nb nonEdites";"% nonEdites";"Nb edites";"% edites";"Total" > ' + @dossier + @fichier
  4. EXEC master.dbo.xp_cmdshell @cmd


 
eh bien je me retrouve avec un fhcier de ce nom : StatProspects_08
Alors qu'il devrait contenir : StatProspects_08.06.05
 
est-ce que c'est possible d'augmenter la taille de ce paramètre ?
 
Autre question, les accents sont très mal exportés, ils sont stockés tel quel dans la base mais dans les fichiers c du n'importe quoi : y'a une soluce ?

n°1112714
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-06-2005 à 14:51:03  profilanswer
 

essaie de mettre de " autour du nom de fichier dans la commande ?
 
en effet, CMD est une émulation de DOS, et comme chacun sait, on peut pas avoir 36 . dans un nom de fichier DOS. Je pense qu'il faut donc que tu l'échappes afin de lui faire comprendre qu'on n'est plus en 1985 mais en 2005 :D

n°1112715
Arjuna
Aircraft Ident.: F-MBSD
Posté le 08-06-2005 à 14:52:02  profilanswer
 

sinon, pour les accents, nan, pas de solution : le fichier est stocké en ASCII.
 
logiquement, quand tu fais ouvrir dans notepad, si tu choisi le même encodage que celui de ta base, tu devrais retomber sur tes pattes.

n°1112728
Fry85
Posté le 08-06-2005 à 14:59:13  profilanswer
 

Non, toujours le même problème
J'ai essayé les simples quotes ', et les doubles "
Rien y fait ! :(

n°1112763
Fry85
Posté le 08-06-2005 à 15:21:35  profilanswer
 

Sinon pour l'encodage en ASCII, si je l'ouvre avec Notepad++, il me l'affiche en ANSI.
Et j'ai pas trouvé comment convertir en ASCII dans notepad, ou dans wordpad !


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

  Exportation SQL Server 2000

 

Sujets relatifs
Formation SQL[SQL SERVEUR 2000] creation de compte URGENT!
[ C++ / miniprog ] Reboot server Ro[SQL] transformé une sous requete en requete avec LEFT join
[SQL Server] Problème avec RAND()Connection à SQL Server mode "Authentification Windows" depuis XP Home
SQL/PHP et Base de données AccessExportation / Tables temporaires dans Sql Server 2000
Plus de sujets relatifs à : Exportation SQL Server 2000


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