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.
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
@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;
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
À 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 =,".