web-dev-qa-db-fra.com

Comment envoyer un résultat de requête au format CSV?

Je travaille sur ETL et j'ai ce code SQL ci-dessous dans ma tâche SQL dans le package SSIS C'est comme ça que j'ai codé. Je sélectionne une donnée d'une table et le résultat de cette requête sous forme de fichier. Je veux que cette pièce jointe soit envoyée au format CSV. Comment fait-on ça? 

EXEC sp_send_dbmail @profile_name='default',
@recipients='[email protected]',
@subject=@SUB,
@body=@BODY,

@query= 'SELECT [MID],[HID],[MeC],[LC],[RowCDate]
FROM [JBC].[dbo].[Table1] WHERE RowCDate >= GETDATE()
',
@attach_query_result_as_file=1

Toute aide sera très appréciée. Merci d'avance. 

11
ETLUser

Ajouter @query_result_separator devrait faire l'affaire.

EXEC sp_send_dbmail @profile_name='default',
@recipients='[email protected]',
@subject=@SUB,
@body=@BODY,

@query= 'SELECT [MID],[HID],[MeC],[LC],[RowCDate]
FROM [JBC].[dbo].[Table1] WHERE RowCDate >= GETDATE()
',
@attach_query_result_as_file=1,
@query_attachment_filename = 'Results.csv',
@query_result_separator = ','

Ajouter @query_result_no_padding = 1 pourrait nettoyer un peu les résultats. Tous les arguments peuvent être trouvés ici

31
JodyT
@query='
SET NOCOUNT ON;
select ''sep=;''
select ''Col1'',''Col2'',''Col3'',''Col3''

select CONVERT(NVARCHAR,Col1),ISNULL(Col2, ''''),Col4
FROM ...
SET NOCOUNT OFF;
',

--Additional settings
@query_attachment_filename = '*.csv',
@query_result_separator = ';',
@attach_query_result_as_file = 1,
@query_result_no_padding= 1,
@exclude_query_output =1,
@append_query_error = 0,
@query_result_header =0;
12
ossie

Ajouter 

'[sep=,' + CHAR(13) + CHAR(10) ColumnName] 

avec résultat résolu le problème

Voir Source

6
rehansheik

Ce commentaire sur violet grenouille indique que vous pouvez également utiliser le caractère de tabulation comme séparateur. 

On dirait aussi que cette réponse a déjà été postée, ma mauvaise: https://stackoverflow.com/a/44315682/5758637

(Copier et coller au cas où le lien de la grenouille mauve serait mort à l'avenir): 

DECLARE @tab char(1) = CHAR(9)
EXEC msdb.dbo.sp_send_dbmail  
@profile_name='donotreply' 
,@recipients ='xx@x'  
,@query= @query  
,@subject= 'xx'  
,@attach_query_result_as_file=1    
,@query_attachment_filename='xx.csv'    
,@query_result_separator=@tab
,@query_result_no_padding=1 –trim
,@query_result_width=32767 –stop wordwrap
1
Michael Armes

À l'intérieur d'un proc:

`SELECT 
table.myColumn AS [sep=, 
myColumn]
, table.myCol2
, table.myCol3...`

avec un retour normal dans l’alias de colonne après "sep =,".

0
Will