Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-02-2005
cso2000 cso2000 is offline
Miembro
 
Registrado: may 2003
Ubicación: Guadalajara, Jalisco
Posts: 108
Poder: 21
cso2000 Va por buen camino
Pasar como parametro el where en una funcion

Saludos a todos:

En esta ocacion mi problema es el siguiente, Tengo una fucion creada en Sql Server que funciona Correctamente, pero es muy lenta la ejecucion ya que el servidor ejecuta la sentencia sql que contiene la funcion y despues al resultado aplica el filtro.

Me explico:

Código SQL [-]
Create Function Query1()
Returns @Reporte TABLE (
  Campo1 Varchar(10),
  Campo Varchar(10) )
AS
BEGIN
  Insert @Reporte
  SELECT Campo1,Campo2 FROM MiTabla
END

y esta funcion la llamo de esta forma

Código:
Select * From Query1() Where Campo1 = 'CONDICION'
Ok, Como les comentaba esta consulta es lenta por que la funcion orimero consulta todos los datos de la tabla y depues filtra el resultado, Intente pasa la clausula Where como parametro de la funcion pero me marco error,

Lo que hize fue esto:

Código SQL [-]
Create Function Query1(@Where AS Varchar(255))
Returns @Reporte TABLE (
  Campo1 Varchar(10),
  Campo Varchar(10) )
AS
BEGIN
  Insert @Reporte
  SELECT Campo1,Campo2 FROM MiTabla
  +@WHERE
END

y La llamada quedo como sigue:

Código:
Select * From Query1('Where Campo1 = '''CONDICION'')
Si alguien tiene una idea de cual pueda ser el error les agradesco de antemano sus Comentarios
Responder Con Cita
  #2  
Antiguo 14-02-2005
lgarcia lgarcia is offline
Miembro
 
Registrado: jul 2004
Posts: 479
Poder: 20
lgarcia Va por buen camino
Pasa como parametro el where en una funcion

Hola

Sil dices que la funcion que creaste es muy lenta porque no pruebas con algo como esto:

CREATE PROCEDURE MostrarBolsoJTurno
@area int,
@cadena nvarchar(4000)
AS
declare @SQLString nvarchar(4000)
set @SQLString = 'SELECT dbo.Bolsos.id, dbo.Bolsos.cartaporte' + CHAR(13)
set @SQLString = @SQLString + 'FROM dbo.Bolsos INNER JOIN dbo.Usuarios ON dbo.Bolsos.usuario = dbo.Usuarios.id' + CHAR(13)
set @SQLString = @SQLString + 'WHERE ' + @cadena + CHAR(13)
set @SQLString = @SQLString + 'Order by fecha, ruta'
EXEC sp_executesql @SQLString
GO

Ojala te pueda servir

Saludos
Luis Garcia
Responder Con Cita
  #3  
Antiguo 15-02-2005
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 22
__hector Va por buen camino
mmm... mas o menos lo que se quiso decir en el anterior mensaje, segun lo que pude entender, es que puedes declarar la sentencia que quieres ejecutar como un string, que puedes construir dinamicamente en la funcion, y luego llamar sp_executesql para obtener los resultados.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:07:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi