PDA

Ver la Versión Completa : Pasar como parametro el where en una funcion


cso2000
14-02-2005, 19:41:49
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:


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


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:


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:


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
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.