Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problemas con un Procedimiento Almac..

Estas en el tema de Problemas con un Procedimiento Almac.. en el foro de SQL Server en Foros del Web. Que tal, tengo un problema que me esta rompiendo la cabeza, espero puedan orientarme.... Bueno hasta hace poco estuve viendo la forma de enviar correos ...
  #1 (permalink)  
Antiguo 02/03/2015, 14:52
 
Fecha de Ingreso: febrero-2015
Mensajes: 89
Antigüedad: 9 años, 2 meses
Puntos: 1
Problemas con un Procedimiento Almac..

Que tal,

tengo un problema que me esta rompiendo la cabeza, espero puedan orientarme....

Bueno hasta hace poco estuve viendo la forma de enviar correos "masivos" y dentro del correo enviar datos en una tabla construida mediante sql... Y me salio tal y como esperaba todo genial !! PERO LO HICE EN UN AMBIENTE DE PRUEBA .. usando el AdventureWorks2008R2 ...

Desde ayer por la noche intente pasarlo a producción usando tablas de mi BD, sin embargo me eh topado con este problema... despues de analizar mucho ... llego a la conclusión que el problema esta en el procdimiento almacenado... veamos.

Procedmiento almacenado para el ambiente de pruebas, CORREO MASIVO

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[GetMailsToBeSent]
  2. AS
  3. BEGIN
  4. DECLARE @contador INT
  5. SET @contador = 1
  6. while @contador  <= 10
  7. BEGIN
  8. DECLARE @fecha DATE
  9. DECLARE @tableHTML  NVARCHAR(MAX) ;
  10. SET @fecha=(SELECT CONVERT(VARCHAR(10),getDate(),120))
  11. SET @tableHTML  =
  12.    N'<head>' +
  13. N'<style type="text/css">h2, body {font-family: Arial, verdana;} table{font-size:11px; border-collapse:collapse;} td{background-color:#F1F1F1; border:1px solid black; padding:3px;} th{background-color:#99CCFF;}</style>' +
  14.    N'<h2><font color="#0000ff" size="4">Work Order Report  ' + CONVERT(VARCHAR,@contador)+ '</font></h2>'+
  15.    N'</head>' +
  16. N'<body>' +
  17. N' <hr> ' +
  18. N' ' +
  19.     N'<table border="1">' +
  20.     N'<tr><th>Work Order ID</th><th>Product ID</th>' +
  21.     N'<th>Name</th><th>Order Qty</th><th>Due Date</th>' +
  22.     N'<th>Expected Revenue</th>
  23.    </tr>' +
  24.     CAST ( ( SELECT top 20  td = wo.WorkOrderID,       '',
  25.                     td = p.ProductID, '',
  26.                     td = p.Name, '',
  27.                     td = wo.OrderQty, '',
  28.                     td = wo.DueDate, '',
  29.                     td = (p.ListPrice - p.StandardCost) * wo.OrderQty
  30.               FROM AdventureWorks2008R2.Production.WorkOrder AS wo
  31.               JOIN AdventureWorks2008R2.Production.Product AS p
  32.               ON wo.ProductID = p.ProductID
  33.               WHERE p.ProductID = 722 + @contador
  34.            --   WHERE DueDate > '2006-04-30'
  35.            --     AND DATEDIFF(dd, '2006-04-30', DueDate) < 2
  36.               ORDER BY DueDate ASC,
  37.                        (p.ListPrice - p.StandardCost) * wo.OrderQty DESC
  38.               FOR XML PATH('tr'), TYPE
  39.     ) AS NVARCHAR(MAX) ) +
  40.     N'</table>' ;
  41.  
  42. UPDATE MailsToBeSent SET  body = @tableHTML, fecha = @fecha WHERE MailID = @contador
  43. SET @contador = @contador +1
  44. END
  45.    SELECT * FROM MailsToBeSent
  46.  
  47. END

Como pueden darse cuenta aquí uso hasta while y me ejecuta genial!!

Procedimiento almacenado para la BD produccion:

Código SQL:
Ver original
  1. ALTER  PROCEDURE proc_enviarCorreo2
  2. AS
  3. BEGIN
  4.  
  5.  
  6. DECLARE @fecha DATE  
  7. DECLARE @tableHTML  VARCHAR(4000) ;  
  8. --set @fecha= (select CONVERT(VARCHAR(10), GETDATE(), 105))
  9. SET @tableHTML  =  
  10.    N'<head>' +  
  11. N'<style type="text/css">h2, body {font-family: Arial, verdana;} table{font-size:11px; border-collapse:collapse;} td{background-color:#F1F1F1; border:1px solid black; padding:3px;} th{background-color:#99CCFF;}</style>' +  
  12.    N'<h2><font color="#0000ff" size="4">Work Order Report   </font></h2>'+  
  13.    N'</head>' +  
  14. N'<body>' +  
  15. N' <hr> ' +  
  16. N' ' +  
  17.     N'<table border="1">' +  
  18.     N'<tr><th> ID</th><th> Fecha </th>' +  
  19.     N'<th>Nombre de Base </th><th> Nombre Del Backup </th><th> Tipo</th>' +  
  20.     N'
  21.    </tr>' +  
  22.     CAST ( ( SELECT top 20  td = wo.id,       ''
  23.               --      td =  CONVERT(VARCHAR(10), fecha, 105) , '',  
  24.              --       td = Base, '',  
  25.               --      td = nombre_bk, '',  
  26.         --            td = Tipo, ''
  27.            FROM backups  AS wo  
  28.           --    where CONVERT(VARCHAR(10), fecha, 105)  = @fecha
  29.             FOR XML PATH('tr'), TYPE  
  30.    ) AS NVARCHAR(MAX) ) +  
  31.     N'</table>' ;  
  32. --print @tableHTML
  33. UPDATE EnviarCorreo  SET  body = @tableHTML
  34.  
  35. SELECT * FROM EnviarCorreo  
  36. END

Despues de quitarle un monton de cosas para llegar en "donde" es el cuello de botella...
y llego a la conclusion que el cuello de botella es en la construcción de la variable @tableHTML, apesar que le pongo q jale solo un campoo... hasta le puse un indice a ese campo .... cuando lo ejecuto desde el SSIS simplemente cae. pero cuando uso el otro procedimiento de la otra BD en el mismo SSIS .. ejecuta sin problemas.

mi duda es.... estas funcionas requieren de algun tipo de configuracion o algo?
estoy pensando que quizás si... no lo se..

Código SQL:
Ver original
  1. FOR XML PATH('tr'), TYPE  
  2.    ) AS NVARCHAR(MAX) ) +

Alguna sugerencia, comentario u.u .. saludos,
  #2 (permalink)  
Antiguo 02/03/2015, 15:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con un Procedimiento Almac..

y cual es la causa de que caiga????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 02/03/2015, 15:35
 
Fecha de Ingreso: febrero-2015
Mensajes: 89
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Problemas con un Procedimiento Almac..

Cita:
Iniciado por Libras Ver Mensaje
y cual es la causa de que caiga????
Me sale este error en el SSIS.
[Failure in Script Task while sending mails.] Error: Valor de tiempo de espera caducado. El período de tiempo de espera caducó antes de completar la operación o el servidor no responde.

Ahora ... si yo le quito esta parte a la variable @TABLEHTML

Código SQL:
Ver original
  1. CAST ( ( SELECT top 20  td = wo.id,       '',  
  2.               --      td =  CONVERT(VARCHAR(10), fecha, 105) , '',  
  3.                     td = Base, '',  
  4.                     td = nombre_bk, '',  
  5.                     td = Tipo, ''
  6.               FROM backups  AS wo  
  7.           --    where CONVERT(VARCHAR(10), fecha, 105)  = @fecha
  8.               FOR XML PATH('tr'), TYPE  
  9.     ) AS NVARCHAR(MAX) ) +

Ejecuta normal, me envia correo.. pero sin datos.
  #4 (permalink)  
Antiguo 02/03/2015, 15:42
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con un Procedimiento Almac..

ya revisaste cual es tu tiempo de espera para los objetos de tu ssis???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 02/03/2015, 15:47
 
Fecha de Ingreso: febrero-2015
Mensajes: 89
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Problemas con un Procedimiento Almac..

Cita:
Iniciado por Libras Ver Mensaje
[URL="https://social.msdn.microsoft.com/Forums/es-ES/5f51483f-906f-4bd5-91ae-91280240cadd/ejecutar-miles-de-sqls-sin-que-de-valor-de-tiempo-de-espera-caducado?forum=sqlserveres"]ya revisaste cual es tu tiempo de espera para los objetos de tu ssis???[/URL]
Sii, ya lo eh cambiado...

en realidad...de todas formas no debería tomar tanto tiempo ya que la tabla a la cual consulto solo tiene un registro (de prueba) ... ni uso while...

Sigo sin entender porque en el ambiente del adventureworks si ejecuta bien rapido .. con while y todo :(

Quiero agregar que si Ejecuto solo el TASK -SCRIPT - del SSIS ... se procesa correctamente ..
  #6 (permalink)  
Antiguo 02/03/2015, 15:56
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con un Procedimiento Almac..

esa parte de codigo, realmente lo que te hace es esto no:


<tr>id</tr>

porque no lo haces con un query simple?? porque la necesidad de meter funciones de xml???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 02/03/2015, 16:04
 
Fecha de Ingreso: febrero-2015
Mensajes: 89
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Problemas con un Procedimiento Almac..

Cita:
Iniciado por Libras Ver Mensaje
esa parte de codigo, realmente lo que te hace es esto no:


<tr>id</tr>

porque no lo haces con un query simple?? porque la necesidad de meter funciones de xml???

Lo que sucede esque el XML (tengo entendido) que lo arma de esta forma:

Código HTML:
Ver original
  1. <tr><td>1</td><td>BD_</td><td>D:\Cargas\TRANSACCIONES\BD__backup_2015_02_24_105501_7416736.bak</td><td>DIFERENCIAL</td></tr>

Revisé varias formas de armar el HTML y todas las que vi eran de esa forma :/
  #8 (permalink)  
Antiguo 02/03/2015, 16:36
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con un Procedimiento Almac..

prueba con algo como esto:

Código SQL:
Ver original
  1. SELECT
  2. '<tr><td>' + columna1 + '</td><td>' + columna2 + '</td><td>' + columnaN + '</td></tr>'
  3. FROM tabla
y ve que resultado te arroja

P.S: No se ocupa configuracion especial para manejar tipos XML
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 02/03/2015, 17:02
 
Fecha de Ingreso: febrero-2015
Mensajes: 89
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Problemas con un Procedimiento Almac..

Cita:
Iniciado por Libras Ver Mensaje
prueba con algo como esto:

Código SQL:
Ver original
  1. SELECT
  2. '<tr><td>' + columna1 + '</td><td>' + columna2 + '</td><td>' + columnaN + '</td></tr>'
  3. FROM tabla
y ve que resultado te arroja

P.S: No se ocupa configuracion especial para manejar tipos XML

Amigo Libras, sale error lo que me dejaste...

aunque tú logica es muy buena.. pero el SQL no lo reconoce de tal forma //

Código SQL:
Ver original
  1. Mens. 207, Nivel 16, Estado 1, Línea 2
  2. El nombre de columna 'id' no es válido.
  3. Mens. 207, Nivel 16, Estado 1, Línea 2
  4. El nombre de columna 'Base' no es válido.
  5. Mens. 207, Nivel 16, Estado 1, Línea 2
  6. El nombre de columna 'Tipo' no es válido.

Por otro lado para comentar que encontré el problema despues de muchos descartes... aunque es algo sin sentido..... Ejemplo en mi paquete ETL el envio de correos se encuentra en el ultimo paso ... ya que con eso confirmo que todo esta ok..

pero que sucede...si en la ETL uno de los pasos usa la "misma" conexion que usa el script para enviar correos.. SALE ERROR Y SE CAE... Si ninguno de ellos USA LA CONEXION... todo corre .. normal y ok.

es extraño... si alguien tiene una explicación logica.. seria genial porque tengo dudas... EL PROBLEMA ESTA RESULETO PERO NO DE LA MEJOR MANERA.

Gracias :D
  #10 (permalink)  
Antiguo 02/03/2015, 17:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con un Procedimiento Almac..

a que te refieres con la misma conexion???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 03/03/2015, 10:30
 
Fecha de Ingreso: febrero-2015
Mensajes: 89
Antigüedad: 9 años, 2 meses
Puntos: 1
Exclamación Respuesta: Problemas con un Procedimiento Almac..

Cita:
Iniciado por Libras Ver Mensaje
a que te refieres con la misma conexion???

Pasa que en el SSIS tengo un Data source como conexion... y en el script tengo otro ya que ejecuto un procedimiento..

al parecer genera conflicto.. al conectar la misma Base de datos por Script cuando lo tengo en el Data Source.

  #12 (permalink)  
Antiguo 03/03/2015, 10:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con un Procedimiento Almac..

y no has probado usando 2 datasources diferentes????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 03/03/2015, 11:18
 
Fecha de Ingreso: febrero-2015
Mensajes: 89
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Problemas con un Procedimiento Almac..

Cita:
Iniciado por Libras Ver Mensaje
y no has probado usando 2 datasources diferentes????
Lo que pasa que el Script Task no se conecta desde un datasource si no de una instancia que sea hace dentro del mismo..

Y sobre crear 2 datasources diferentes para que lo haría ? si al fin de cuentas ese data source estaria señalando a la misma BD.
  #14 (permalink)  
Antiguo 03/03/2015, 11:45
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con un Procedimiento Almac..

porque 2 datasources, quizas uno de tus datasources bloquea la base/tabla y por eso tienes el problema que mencionas
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: procedimiento, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:21.