Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2012, 11h12   #1
 
Inscription : janvier 2012
Messages : 1
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 1
Points : -1
Points : -1
Par défaut Renommer des colonnes dans une requête SQL en utilisant bcp

Bonjour à tous,

je me trouve confronté à un souci technique auquel je n'arrive pas à trouver de réponse.

Pour faire simple, je souhaite utiliser l'utilitaire bcp et la commande xp_cmdshell afin d'automatiser l'extraction de données d'une table de ma BDD.
Lors de cette extraction, j'ai besoin d'afficher des noms de colonnes et des numéros de lignes, j'ai fait ma requête SQL qui fonctionne parfaitement lors d'un test avec Toad for SQL Server mais qui ne marche plus lorsque je mets le tout dans une procédure stockée avec appel a bcp et xp_cmdshell.

Je vous mets l'exemple de ma procédure stockée si jamais quelqu'un peut m'apporter une piste ou une solution.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
BEGIN
  SET NOCOUNT ON;
DECLARE @L_CURRENTDATE DATETIME
DECLARE @L_OUT_PATH VARCHAR(100)
DECLARE @L_OUT_FILENAME VARCHAR(100)
DECLARE @QUERY NVARCHAR(4000)
 
 
SET @L_CURRENTDATE = GETDATE()
SET @L_OUT_PATH = 'C:\Users\XXXX\'
SET @L_OUT_FILENAME =@Service+'_Test_'+@QuarterYear+'.csv'
 
 
SET @QUERY = 'SELECT row_number() OVER (ORDER BY Direct_Participant_BIC),
       Direct_Participant_BIC+'STEP2' AS '2' ,
       Total_Payments_Sent AS '3',
       Daily_Average_Payments_Sent AS '4',
       Total_Payments_Received	AS '5',
       Daily_Average_Payments_Received AS '6',
       Sending_First_XXXX	AS '7',
       Sending_Remaining AS '8',
       Min_Charging_For_Sending AS '9',
       Charging_Remaining AS '10',
       Charging_Receiving AS '11',
       Total_Tier_Charges_To_Be_Billed AS '12',
       Average_Price_For_Transaction_Sent AS '13',
       Average_Price_For_Transaction_Received AS '14'
       FROM [BDD]..['+@Table_Name+']'
 
SET @QUERY = 'bcp "'+@QUERY+'" queryout ' + @L_OUT_PATH + @L_OUT_FILENAME + ' -c -t";" -T '
PRINT @QUERY
 
SET @QUERY = 'execute master.dbo.xp_cmdshell '+''''+@QUERY+''''
 
EXECUTE master.dbo.sp_executesql @QUERY,N'@L_CURRENTDATE DATETIME',@L_CURRENTDATE
 
RAISERROR( '', 0, 1) WITH NOWAIT
END
Le fait de renommer les colonnes avec 'AS' ne passe pas et cela me sort une erreur à chaque fois, pourtant il me faudrait pouvoir renommer ces colonnes pour sortir un fichier correct.

Merci d'avance pour votre aide.
Polochon_77 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 12/01/2012, 17h32   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 670
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 670
Points : 8 732
Points : 8 732
Bonjour,

Quel est le libellé de l'erreur ?

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/01/2012, 18h50   #3
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 554
Points : 554
Bonjour,


Concernant la construction de ta chaine @QUERY,
a/Je ne suis pas sure que tu puisses mettre des retour chariot, mais je ne garantie pas le contraire non plus.
b/ Tu n'as pas géré le fait que tu as des simple quote ' dans ta chaine. Pour les gérer, soit tu les doubles (deux simples quotes) soit tu les échapes, mais là je ne sais pas faire.

Met un print avant la concaténation et après. Met en commentaire le execute, et vérifie la gueule de @query.

Deuxième remarque, pour renommer la deuxième colonne, j'aurais écrit
Sans quote

A+
Soazig
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h12.


 
 
 
 
Partenaires

Hébergement Web