Professional Documents
Culture Documents
Sin embargo tenemos una solucin ideal que rompe este esquema.
En el siguiente link HTTP://WWW.SQLDEV.NET/XP/XPSMTP.HTM encontraran informacin acerca de como instalar el componente xpsmtp basado en SMTP para envi de correo desde SQL Server y podrn adems descargar las dll correspondientes. El siguiente ejemplo lo realic con los siguientes software: 1. Microsoft Windows XP sp2 2. Microsoft SQL Server 2000 sp4 3. Kerio Mail Server 6.4 (descargado desde WWW.KERIO.COM ) 4. Microsoft Outlook 2003 (se puede utilizar cualquier otro cliente POP3) En la prctica este proceso lo realice para notificar al coordinador de una gran compaa de alimentos de que tiene pedidos pendientes por aprobar. Bsicamente toda la lgica reside en un store procedure el cual es ejecutado por una tarea programada en forma diaria. La actual versin de la dll xpsmtp no provee envio de querys adjuntos, sin embargo esto no es inpedimento para recurrir a la imaginacin y utilizar el comando bcp para generar un archivo de texto plano con los datos a adjuntar, el detalle esta en que el bcp no tiene forma de crear los encabezados de las columnas siendo materia de consulta en muchos de los foros de internet sin ninguna solucin optima. En esta oportunidad les brindar una manera sencilla y fcil de poder incluir los encabezados.
Esto es mas fcil de interpretar para el usuario que el resultado anterior emitido por el bcp
Para este ejemplo utilizaremos la Base de Datos Northwind y crearemos previamente una carpeta temporal c:\tempsql donde se guardar el archivo de texto generado por el bcp el cual a su vez sera el attachment usado por el procedimiento xp_smtp_sendmail. Asumiremos que todos los pedidos estan pendientes. El cdigo transact sql es el siguiente: / ******************************************************************* ********************* Procedure : spp_pedpendientes Description: Lista los pedidos pendientes y Envia email al responsable de autorizar los pedidos Author Date : Rony Olazbal : 22/07/2007
******************************************************************* **********************/ declare @archivo_txt varchar(100) declare @administrador_SQL varchar(50) declare @password_sql varchar(50) declare @base_datos varchar(50)
--- Este es un truco para obtener el query con encabezado en formato de texto plano para ser usado por el bcp declare @query varchar(600) set @query='select ''OrderID CustomerID '' as linea '+ 'union all '+ 'select ''==================================================== ========================='' as linea '+ 'union all '+ 'select convert(char(10),p.orderid) + space(1)+ p.customerid + space(1) + convert(char(30),c.companyname) + space(1) + convert(varchar(10),p.orderdate,103) as linea '+ 'from '+ @base_datos + '.dbo.orders p left join '+ @base_datos + '.dbo.customers c on p.customerid=c.customerid ' Companyname OrderDate
--- obtiene el nmero de registros procesados exec (@query) declare @registros int set @registros = @@rowcount
--- Comando bcp para generar el archivo de texto plano. DECLARE @chr_BCP_ARCHIVO VARCHAR(4000)
SELECT @chr_BCP_ARCHIVO = 'bcp "' + @query + '" queryout '+ @archivo_txt + ' -c -U '+ @administrador_SQL + ' -P '+ @password_sql EXEC master..xp_cmdshell @chr_BCP_ARCHIVO if @registros > 0 -------------------------------------------------------- envia email SMTP -----------------------------------------------------Begin declare @mensaje varchar(250) declare @rc int set @mensaje='Estimado Sr.(a)'+ char(13)+char(13)+'Usted tiene ' + ltrim(str(@registros)) + ' pedidos pendientes por aprobar.' exec @rc = master.dbo.xp_smtp_sendmail @FROM = 'admin@orion.com',
@FROM_NAME = 'Administrador', @TO @priority @subject @message @type = 'ronyol@orion.com', = 'HIGH', = 'Pedidos pendientes por aprobar', = @mensaje, = 'text/plain',
Finalmente ejecutamos el cdigo anterior desde un store procedure o una tarea programada y se enviar un correo notificando los pedidos pendientes de aprobacin.
Rony Olazbal Ramirez (NETRONY@HOTMAIL.COM ), Caracas, Venezuela, es MCDBA en SQL Server 2000/2005, MCAD, MCSD, MCT. Dedicado al desarrollo de sistemas desde el ao 1987; 5ta. Estrella en DCE , especialista en tecnologas .NET, VB .Net, C# , ASP .Net y Web Services XML.