web-dev-qa-db-ja.com

クエリ結果をCSV形式で送信する方法は?

私はETLに取り組んでおり、SSISパッケージのSQLタスクに以下のSQLコードがあります。これは私がコーディングした方法です。テーブルからデータを選択し、そのクエリの結果をファイルとして選択しています。この添付ファイルをCSV形式で送信してください。どうすればいいのですか?

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

どんな助けでも大歓迎です。前もって感謝します。

12
ETLUser

@query_result_separatorを追加するとうまくいくはずです。

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 = ','

@query_result_no_padding = 1を追加すると、結果が少し整理される場合があります。すべての引数は見つかります here

33
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

追加

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

結果は問題を解決しました

参照 ソース

6
rehansheik

紫色のカエルに関するこのコメント は、区切り文字としてタブ文字も使用できることを示しています。

また、この回答はすでに投稿されているようです、私の悪い: https://stackoverflow.com/a/44315682/5758637

(紫色のカエルのリンクが将来死んでしまった場合のコピーと貼り付け):

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

プロシージャ内:

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

「sep =、」の後の列エイリアス内の通常のハードリターン。

0
Will