【发布时间】:2009-04-02 13:12:43
【问题描述】:
我有两个任务,因为我是新手,所以我需要一些大师的帮助/建议。
我需要做的是将 q select 查询的结果发送到一个 csv 文件,该文件可以将分隔符作为逗号或制表符,然后将此文件作为附件发送给特定的收件人。
希望得到一些好的建议
【问题讨论】:
标签: sql-server stored-procedures
我有两个任务,因为我是新手,所以我需要一些大师的帮助/建议。
我需要做的是将 q select 查询的结果发送到一个 csv 文件,该文件可以将分隔符作为逗号或制表符,然后将此文件作为附件发送给特定的收件人。
希望得到一些好的建议
【问题讨论】:
标签: sql-server stored-procedures
您可以使用 SQL Server Integration Services (SSIS) 轻松完成此操作。从查询复制到平面 (CSV) 文件的数据流任务,然后是通过电子邮件发送平面文件的任务。
【讨论】:
SSIS 可能是要走的路,但如果你想让 T-SQL 来做,试试这个..
我不会为你写完整的程序,但这里是要点......
确定分割字符:
SET @CSV=',' --use CHAR(9) for tab
一次一行地构建您的 CSV 字符串,循环遍历结果(对每一行执行此操作):
SET @FileMessage=ISNULL(CONVERT(varchar(10),column1),'')+@CSV+ISNULL(CONVERT(varchar(10),column2),'')
SET @ExecuteString = RTRIM('echo ' + @FileMessage + ' >>' + @FileName)
--append it to you file, you'll need write permissions
EXEC @ReturnValue=master..xp_cmdshell @ExecuteString, no_output
真正发送邮件,文件完全构建后:
EXEC xp_sendmail { [ @recipients= ] 'recipients [ ;...n ]' }
[ ,[ @message= ] 'message' ]
[ ,[ @query= ] 'query' ]
[ ,[ @attachments= ] 'attachments [ ;...n ]' ]
[ ,[ @copy_recipients= ] 'copy_recipients [ ;...n ]'
[ ,[ @blind_copy_recipients= ] 'blind_copy_recipients [ ;...n ]'
[ ,[ @subject= ] 'subject' ]
[ ,[ @type= ] 'type' ]
[ ,[ @attach_results= ] 'attach_value' ]
[ ,[ @no_output= ] 'output_value' ]
[ ,[ @no_header= ] 'header_value' ]
[ ,[ @width= ] width ]
[ ,[ @separator= ] 'separator' ]
[ ,[ @echo_error= ] 'echo_value' ]
[ ,[ @set_user= ] 'user' ]
[ ,[ @dbuse= ] 'database' ]
【讨论】:
SSIS 将是您的最佳选择。查看此链接,了解如何将数据从 csv 文件传输到 SQL:Import Data From CSV
【讨论】: