Hacer condicional el envio de sp_send_dbmail sobre SELECT, Tengo codigo
Publicado por Jazpef (5 intervenciones) el 12/02/2014 22:08:04
Tengo un Script SQL Server que lo que realiza es mandar un correo (notificación) a los destinatarios indicado, funciona y todo, este script tiene procesos almacenados que funcinan conjunto con este para que se envie el correo en formato HTML, la información se almacena en una tabla temporal y se envie sin problemas PERO MI DUDA ES:
¿Como puede poner un IF o CASE o algun otra alternativa? para que se envie el correo o no, es decir si el SELECT almacenado tiene informacion mande el correo de lo contrario no mande nada y no realize la operacion, ya intente de diversas formas integrar o poner un IF o CASE me marca errores y no me lo permite por lo que ya ando algo perdido, posiblemente sea algo facil pero ya me atore y no se como realizarlo, si pudieran orientar se los agradeceria.
Por ejemplo he intentado y no funciona:
--DECLARE @TABLAS VARCHAR (MAX)
--EXEC @TABLAS = OpenSercas..JAPF_SpSinCerrarSDB 'JAPF'
--IF @TABLAS NOT IN ('',' ',NULL)
--IF (EXEC OpenSercas..JAPF_SpSinCerrarSDB 'JAPF') NOT IN ('',' ',NULL)
--BEGIN
--DECLARE @SELECT VARCHAR (MAX)
--DECLARE @TABLAS VARCHAR (MAX)
--EXEC @TABLAS = OpenSercas..JAPF_SpSinCerrarSDB 'JAPF'
--SET @SELECT = (CASE
-- WHEN @TABLAS NOT IN (' ','',NULL) THEN (
-- Y NADA PUEDO HACER QUE FUNICIONE :S
Codigo:
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
DECLARE @profile_name VARCHAR(200)
DECLARE @recipients VARCHAR(MAX)
DECLARE @subject nVARCHAR(400)
DECLARE @mensajeCuerpo varchar(250)
SET @mensajeCuerpo ='<div style="font-size: 10.0pt; font-family: "Thaoma","Arial";"><br><br>¡Buen día!<br><br>Favor de continuar con el seguimiento de las seguientes referencias: <br></div>'
SET @profile_name = 'NAAPP'
SET @recipients = '[email protected]'
SET @subject = 'Reportes faltantes de atención de' +' '+'Name App'+' '+'-'+' '+ (CAST(Datename(month,getdate()) as nvarchar)) +' '+
(CAST(DatePart(day,getdate()) as varchar(2))) +','+ ' '+
(CAST(DatePart(year,getdate()) as varchar(4))) +' '+ '-'+' '+
(CAST(DatePart(hour,getdate()) as varchar(2))) +':'+
(CAST(DatePart(minute,getdate()) as varchar(2)))
CREATE TABLE #TMPTABLA1 (
[#] int IDENTITY,
Referencia int,
Clasificacion varchar (50),
Fecha_Registro varchar (80),
Sistema varchar(50),
Servicio_Reportado varchar(100),
Cliente varchar(50),
Estado varchar(50),
Usuario_Registro varchar(50),
Representante varchar(50),
Grupo_Representante varchar(50),
Fuente_Contacto varchar(50),
Status_Ticket varchar(50),
Fecha_Status varchar (80),
FechaUltimaBitacora varchar (80)
)
INSERT INTO #TMPTABLA1 (Referencia, Clasificacion, Fecha_Registro, Sistema, Servicio_Reportado, Cliente, Estado, Usuario_Registro, Representante, Grupo_Representante, Fuente_Contacto, Status_Ticket, Fecha_Status, FechaUltimaBitacora)
EXEC OpenSercas..JAPF_SpSinCerrarSDB 'JAPF'
CREATE TABLE #TABLAPASOHTML (
TABLA NVARCHAR(MAX)
)
exec OpenSercas.dbo.JAPF_SpSelExportTablaHtmlSD 'tempdb.dbo.#TMPTABLA1', @mensajeCuerpo, '#'
DECLARE @body NVARCHAR(MAX)
DECLARE @head NVARCHAR(MAX)
DECLARE @bodyfinal NVARCHAR(MAX)
DECLARE @Firma varchar(max)
DECLARE @TablaHTML1 NVARCHAR(MAX)
SELECT @head = OpenSercas.dbo.JAPF_fnHeadTablaSD()
SELECT @Firma = OpenSercas.dbo.JAPF_fnFirmaJAPF(1)
SET @body ='<html>'+@head +'<body>'
SET @TablaHTML1 =''
SELECT @TablaHTML1 =@TablaHTML1 +TABLA FROM #TABLAPASOHTML
SELECT @TablaHTML1 = Replace(@TablaHTML1, '<', '<')
SELECT @TablaHTML1 = Replace(@TablaHTML1, '>', '>')
SET @bodyfinal ='</body></html>'
SET @body = @body + @TablaHTML1+@Firma+@bodyfinal
DROP TABLE #TABLAPASOHTML
DROP TABLE #TMPTABLA1
EXEC msdb.dbo.sp_send_dbmail
@profile_name = @profile_name
,@recipients= @recipients
,@query_no_truncate=1
,@query_result_separator=''
,@subject = @subject
,@body=@body
,@body_format='HTML'
,@query_result_width=32767;
SET NOCOUNT OFF
SET ANSI_WARNINGS ON
¿Como puede poner un IF o CASE o algun otra alternativa? para que se envie el correo o no, es decir si el SELECT almacenado tiene informacion mande el correo de lo contrario no mande nada y no realize la operacion, ya intente de diversas formas integrar o poner un IF o CASE me marca errores y no me lo permite por lo que ya ando algo perdido, posiblemente sea algo facil pero ya me atore y no se como realizarlo, si pudieran orientar se los agradeceria.
Por ejemplo he intentado y no funciona:
--DECLARE @TABLAS VARCHAR (MAX)
--EXEC @TABLAS = OpenSercas..JAPF_SpSinCerrarSDB 'JAPF'
--IF @TABLAS NOT IN ('',' ',NULL)
--IF (EXEC OpenSercas..JAPF_SpSinCerrarSDB 'JAPF') NOT IN ('',' ',NULL)
--BEGIN
--DECLARE @SELECT VARCHAR (MAX)
--DECLARE @TABLAS VARCHAR (MAX)
--EXEC @TABLAS = OpenSercas..JAPF_SpSinCerrarSDB 'JAPF'
--SET @SELECT = (CASE
-- WHEN @TABLAS NOT IN (' ','',NULL) THEN (
-- Y NADA PUEDO HACER QUE FUNICIONE :S
Codigo:
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
DECLARE @profile_name VARCHAR(200)
DECLARE @recipients VARCHAR(MAX)
DECLARE @subject nVARCHAR(400)
DECLARE @mensajeCuerpo varchar(250)
SET @mensajeCuerpo ='<div style="font-size: 10.0pt; font-family: "Thaoma","Arial";"><br><br>¡Buen día!<br><br>Favor de continuar con el seguimiento de las seguientes referencias: <br></div>'
SET @profile_name = 'NAAPP'
SET @recipients = '[email protected]'
SET @subject = 'Reportes faltantes de atención de' +' '+'Name App'+' '+'-'+' '+ (CAST(Datename(month,getdate()) as nvarchar)) +' '+
(CAST(DatePart(day,getdate()) as varchar(2))) +','+ ' '+
(CAST(DatePart(year,getdate()) as varchar(4))) +' '+ '-'+' '+
(CAST(DatePart(hour,getdate()) as varchar(2))) +':'+
(CAST(DatePart(minute,getdate()) as varchar(2)))
CREATE TABLE #TMPTABLA1 (
[#] int IDENTITY,
Referencia int,
Clasificacion varchar (50),
Fecha_Registro varchar (80),
Sistema varchar(50),
Servicio_Reportado varchar(100),
Cliente varchar(50),
Estado varchar(50),
Usuario_Registro varchar(50),
Representante varchar(50),
Grupo_Representante varchar(50),
Fuente_Contacto varchar(50),
Status_Ticket varchar(50),
Fecha_Status varchar (80),
FechaUltimaBitacora varchar (80)
)
INSERT INTO #TMPTABLA1 (Referencia, Clasificacion, Fecha_Registro, Sistema, Servicio_Reportado, Cliente, Estado, Usuario_Registro, Representante, Grupo_Representante, Fuente_Contacto, Status_Ticket, Fecha_Status, FechaUltimaBitacora)
EXEC OpenSercas..JAPF_SpSinCerrarSDB 'JAPF'
CREATE TABLE #TABLAPASOHTML (
TABLA NVARCHAR(MAX)
)
exec OpenSercas.dbo.JAPF_SpSelExportTablaHtmlSD 'tempdb.dbo.#TMPTABLA1', @mensajeCuerpo, '#'
DECLARE @body NVARCHAR(MAX)
DECLARE @head NVARCHAR(MAX)
DECLARE @bodyfinal NVARCHAR(MAX)
DECLARE @Firma varchar(max)
DECLARE @TablaHTML1 NVARCHAR(MAX)
SELECT @head = OpenSercas.dbo.JAPF_fnHeadTablaSD()
SELECT @Firma = OpenSercas.dbo.JAPF_fnFirmaJAPF(1)
SET @body ='<html>'+@head +'<body>'
SET @TablaHTML1 =''
SELECT @TablaHTML1 =@TablaHTML1 +TABLA FROM #TABLAPASOHTML
SELECT @TablaHTML1 = Replace(@TablaHTML1, '<', '<')
SELECT @TablaHTML1 = Replace(@TablaHTML1, '>', '>')
SET @bodyfinal ='</body></html>'
SET @body = @body + @TablaHTML1+@Firma+@bodyfinal
DROP TABLE #TABLAPASOHTML
DROP TABLE #TMPTABLA1
EXEC msdb.dbo.sp_send_dbmail
@profile_name = @profile_name
,@recipients= @recipients
,@query_no_truncate=1
,@query_result_separator=''
,@subject = @subject
,@body=@body
,@body_format='HTML'
,@query_result_width=32767;
SET NOCOUNT OFF
SET ANSI_WARNINGS ON
Valora esta pregunta


0