Problemas con Funcion Definida por el Usuario

14/12/2007 - 00:31 por Ody Barrera | Informe spam
Hola a todos:

Espero que puedan ayudarme con un problema que se nos ha presentado en la
aplicación que tenemos desarrollada, tenemos un procedimiento almacenado que
utiliza una función defina por el usuario que retorna una variable tipo tabla
y la relaciona con otras tablas. Por ejemplo:

CREATE PROCEDURE <mi_procedimiento>
AS
SET NOCOUNT ON

SELECT <lista_campos>,
SUM(sb.Cantidad) AS Cantidad
FROM fn_StockLote(@prm1, @prm2) sb
INNER JOIN Producto p (NOLOCK) ON (p.Producto = sb.Producto)
WHERE sb.Cantidad > 0
GROUP BY <lista_campos>

SET NOCOUNT OFF
GO

Esta función es utilizada en otros procedimientos para obtener los stocks de
los productos, bueno estamos utilizando una conexion con ADO y al invocar al
recordset utilizamos: CursorLocation : adUseCLient, adOpenForwardOnly,
adLockReadOnly en SQL Server 2000 funcionaba correctamente, hace unos meses
migramos a SQL Server 2005 y con esta configuracion tenemos problemas al
ejecutar el procedimiento almacenado.

Espero que me haya explicado bien y puedan ayudarme, no creo que sea
incompatilidad de la UDF con la configuracion del recordet ya que se hizo
otra prueba con un proc. similar pero que retorna pocos datos y funciona
correctamente.

Me quedan dudas si el SQL Server 2005 tiene problemas con el rendimiento en
las consultas pues varias procedimientos en SQL Server 2000 funcionaban
correctamente, pero migrados a SQL Server 2005 tienen problemas son lentos
pues se ha utilizado ORDER BY en algunos.

Espero su ayuda y les agradezco por anticipado.

Saludos.
 

Leer las respuestas

#1 Gux (MVP)
14/12/2007 - 15:54 | Informe spam
Usted dice "migramos a SQL Server 2005 y con esta configuracion tenemos
problemas al ejecutar el procedimiento almacenado" y "en SQL Server 2000
funcionaban correctamente, pero migrados a SQL Server 2005 tienen problemas
son lentos pues se ha utilizado ORDER BY en algunos."

Hay mensajes de error o simplemente es un problema de rendimiento?

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Ody Barrera" wrote:

Hola a todos:

Espero que puedan ayudarme con un problema que se nos ha presentado en la
aplicación que tenemos desarrollada, tenemos un procedimiento almacenado que
utiliza una función defina por el usuario que retorna una variable tipo tabla
y la relaciona con otras tablas. Por ejemplo:

CREATE PROCEDURE <mi_procedimiento>
AS
SET NOCOUNT ON

SELECT <lista_campos>,
SUM(sb.Cantidad) AS Cantidad
FROM fn_StockLote(@prm1, @prm2) sb
INNER JOIN Producto p (NOLOCK) ON (p.Producto = sb.Producto)
WHERE sb.Cantidad > 0
GROUP BY <lista_campos>

SET NOCOUNT OFF
GO

Esta función es utilizada en otros procedimientos para obtener los stocks de
los productos, bueno estamos utilizando una conexion con ADO y al invocar al
recordset utilizamos: CursorLocation : adUseCLient, adOpenForwardOnly,
adLockReadOnly en SQL Server 2000 funcionaba correctamente, hace unos meses
migramos a SQL Server 2005 y con esta configuracion tenemos problemas al
ejecutar el procedimiento almacenado.

Espero que me haya explicado bien y puedan ayudarme, no creo que sea
incompatilidad de la UDF con la configuracion del recordet ya que se hizo
otra prueba con un proc. similar pero que retorna pocos datos y funciona
correctamente.

Me quedan dudas si el SQL Server 2005 tiene problemas con el rendimiento en
las consultas pues varias procedimientos en SQL Server 2000 funcionaban
correctamente, pero migrados a SQL Server 2005 tienen problemas son lentos
pues se ha utilizado ORDER BY en algunos.

Espero su ayuda y les agradezco por anticipado.

Saludos.



Preguntas similares