sp_send_dbmail joindre des fichiers stockés en tant que varbinary dans la base de données
J'ai un question relative à l'envoi des résultats de la requête en tant que pièces jointes à l'aide de sp_send_dbmail.
Problème 1: de base Seulement .txt des fichiers s'ouvre. Tout autre format comme .pdf ou .jpg sont endommagés.
Problème 2: Lorsque vous tentez d'envoyer plusieurs pièces jointes, je reçois un fichier avec tous les noms de fichiers collés ensemble.
Je suis en cours d'exécution de SQL Server 2005 et j'ai une table stockant les documents téléchargés:
CREATE TABLE [dbo].[EmailAttachment](
[EmailAttachmentID] [int] IDENTITY(1,1) NOT NULL,
[MassEmailID] [int] NULL, -- foreign key
[FileData] [varbinary](max) NOT NULL,
[FileName] [varchar](100) NOT NULL,
[MimeType] [varchar](100) NOT NULL
J'ai aussi un MassEmail table avec la norme e-mail trucs. Voici le SQL Envoyer du Courrier script. Par souci de concision, j'ai exclu les instructions declare.
while ( (select count(MassEmailID) from MassEmail where status = 20 )>0)
begin
select @MassEmailID = Min(MassEmailID) from MassEmail where status = 20
select @Subject = [Subject] from MassEmail where MassEmailID = @MassEmailID
select @Body = Body from MassEmail where MassEmailID = @MassEmailID
set @query = 'set nocount on; select cast(FileData as varchar(max)) from Mydatabase.dbo.EmailAttachment where MassEmailID = '+ CAST(@MassEmailID as varchar(100))
select @filename = ''
select @filename = COALESCE(@filename+ ',', '') +FileName from EmailAttachment where MassEmailID = @MassEmailID
exec msdb.dbo.sp_send_dbmail
@profile_name = 'MASS_EMAIL',
@recipients = '[email protected]',
@subject = @Subject,
@body =@Body,
@body_format ='HTML',
@query = @query,
@query_attachment_filename = @filename,
@attach_query_result_as_file = 1,
@query_result_separator = '; ',
@query_no_truncate = 1,
@query_result_header = 0;
update MassEmailset status= 30,SendDate = GetDate() where MassEmailID = @MassEmailID
end
Je suis capable de lire des fichiers partir de la base de données donc je sais que les données binaires n'est pas endommagé.
.txt fichiers en lecture uniquement lorsque je lance FilaData de type varchar. Mais clairement d'origine les en-têtes sont perdus. Il est également intéressant de noter que le fichier de la pièce jointe les tailles sont différentes que les fichiers originaux. C'est probablement dû à un mauvais encodage. Donc je suis en espérant que il y a un moyen de créer des en-têtes de fichier à l'aide de la stockées mimetype, ou d'une certaine façon à inclure les en-têtes de fichier dans les données binaires?
Je suis aussi pas confiance dans les valeurs de la dernière quelques paramètres, et je sais se rejoignent pas tout à fait juste, car il ajoute le premier nom de fichier avec une virgule. Mais une bonne documentation est presque impossible à trouver. S'il vous plaît aider!
OriginalL'auteur Mindstorm Interactive | 2012-09-14
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous allez être en mesure d'envoyer des données binaires directement à partir de SQL. Il y a un quelques postes là qui parlent de cette même question. À partir de la La documentation de Microsoft un texte retour à la requête sous forme de fichier texte. Binaire est au format hexadécimal. Comme vous l'avez souligné corrompt tout fichier qui n'est pas un document texte.
Je pense que tu pourrais encore faire ce que vous essayez de faire, cependant, en première aide BCP pour exporter les données binaires pour le système de fichiers, puis de l'importer dans de retour via traditionnel de fichier de la pièce jointe méthodes disponibles pour sendmail.
Donc quelque chose comme cela. (concept n' - code non testé)
un peu de chance sur cette question.
OriginalL'auteur RThomas