Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Pasar como parametro el where en una funcion (https://www.clubdelphi.com/foros/showthread.php?t=18505)

cso2000 14-02-2005 19:41:49

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

lgarcia 14-02-2005 20:04:27

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

__hector 15-02-2005 02:49:47

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.


La franja horaria es GMT +2. Ahora son las 20:13:02.

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