Estou criando alguns relatórios via BCP para serem enviados por e-mails.
create TABLE ##tempsss
(
create TABLE ##JOB_DataAssociacao_verContrato
(
F1 VARCHAR(6)
,F2 VARCHAR(200)
,F3 VARCHAR(22)
,F4 char(1)
,F5 varchar(10)
,F6 varchar(15)
,F7 varchar(30)
,F8 varchar(10)
,F9 VARCHAR(18)
) --it needs to be varchar to be able to use header
)
insert into ##tempsss
SELECT
...fields...
FROM some table or view
go
-------------------------------------------------------------
--passo 2 --
exec xp_cmdshell 'bcp "select ''field1'',''field2'',''field3'' UNION ALL select * from table or view" queryout "filepath\filename.xls" -U sa -P password -w -S servername'
-------------------------------------------------------------
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'dba profile or something',
@recipients = 'recipients email',
@subject = 'email subject',
@file_attachments='path\filename.xls'
-------------------------------------------------------------
drop table ##tempsss
com 9k linhas, eu tenho um arquivo de 2mb. Acabei de copiar o conteúdo deste arquivo e colar dentro de um arquivo excel vazio e tenho 160 KB.
como posso usar bcp, mas criando arquivos menores?
Estou tendo gproblems para enviar arquivos acima de 1mb via dbmail.
Eu configurei o dbmail para enviar arquivos com 10mb+. smtp está ok também.
O Excel usa compactação internamente ao salvar um arquivo, esse é o motivo mais provável pelo qual você está vendo um arquivo do Excel muito menor.
Eu recomendaria compactar o arquivo .bcp antes de enviá-lo por e-mail. Use um compressor de linha de comando, como 7-Zip.
Além disso, eu recomendaria usar o formato BCPs Native (-n) ou Unicode Native, por meio da opção -N. Tenha cuidado ao usar o
-c
modo se você tiver tipos de dados Unicode (nvarchar/nchar) em sua exportação.Do utilitário de linha de comando Manuais Online para bcp.exe :
Você pode usar sua tabela temporária global diretamente para exportar dados para um arquivo do Excel usando o procedimento armazenado encontrado aqui: ExportToExcel . A consulta é a seguinte:
após a execução, o proc exibirá o local do arquivo e você poderá acessá-lo facilmente.
PS: você também pode usar parâmetro
@MailSubject
e@MailBody
especificar corpo e assunto do email, a única limitação desse proc é não habilitar o PSGallery no servidor de destino, ele precisará ser adicionado e pode ser necessário instalar o módulo ImportExcel