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