SQL - QUERY SQL (funciona en Access y Oracle) no en ASP

 
Vista:

QUERY SQL (funciona en Access y Oracle) no en ASP

Publicado por Miguel (1 intervención) el 25/11/2005 19:02:48
He usado con mucho exito y frecuencia un truco SQL, tanto en aplicaciones Access como en Oracle, que al querer aplicarlo en ASP no he podido dar con la sintaxis correcta o, más bien, conseguir que funcione.
Se trata de poder filtrar datos mediante variables obtenidas de los usuarios en la cual pongo mi Query de la siguiente forma:

SELECT *
FROM (Nombre de la tabla)
WHERE (((Nombre de la Variable y Formulario)=(nombre del campo)) Or (Nombre de la Variable y Formulario)Is Null)))

De esta forma puedo incluir varias condiciones encadenadas todas con AND para permitir que el usuario pueda hacer uso de una cualquiera, de varias o de todas ellas.
Así, cuando se queda en blanco alguna de las variables, mi Query continuará funcionando como es que me interesa.

Pues bien, al querer llevar esta misma consulta a una aplicación ASP me he visto obligado, para conseguir igual resultado, a incluir una buena cantidad de condicionantes de VBasic y quisiera saber si alguno de Uds. conoce una solución para que mi Query SQL pueda funcionar en ASP o alguna forma simple, sin tantos "IF(es) y THEN" y que me proporcione igual resultado.

Gracias, de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:QUERY SQL (funciona en Access y Oracle) no en A

Publicado por christian (38 intervenciones) el 30/11/2005 20:11:29
Hola,

Lo que pasa es que con ado estas determinado a usar VB para la construccion del script, lo que te recomiendo que hagas es un Store Procedure que ejecute el query por vos en el ASP.

Este ejemplo es lindo y veras que sirve con facilidad...

Saludos, espero te sirva...

CREATE PROCEDURE Sp_Usr_Retrieve_List_Reportes_Motivos_Anulacion
(
@DIA_INI VARCHAR(19),
@DIA_FIN VARCHAR(19),
@MOTIVO VARCHAR(2),
@ID_HIPER AS VARCHAR(4),
@ID_ORIGEN_PEDIDO AS VARCHAR(1),
@OPERADOR VARCHAR(5),
@SECCION VARCHAR(5),
@COD_ARTICULO AS VARCHAR(10),
@REPORT INT
)
AS
-- ********************************************************************************
-- ********************************************************************************
--
-- PARAMETROS I : @DIA_INI AS DATETIME, FECHA INICIO DE RANGO
-- @DIA_FIN AS DATETIME, FECHA FIN DE RANGO
-- @OPERADOR AS VARCHAR(6), ID DEL OPERADOR QUE INTERVIENE
-- @MOTIVO AS INT, MOTIVO DEL LLAMADO SEGUN TABLA MOTIVOS_ANULACION
-- @REPORT AS INT, TIPO DE REPORTE SELECCIONADO
-- MODIFICO : --
-- FECHA : --
-- ********************************************************************************
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
-- ********************************************************************************
-- DECLARACIONES DE VARIABLES INTERNAS
-- ********************************************************************************
DECLARE @QUERY AS VARCHAR(1500)
DECLARE @CONDICION AS VARCHAR(1500)
DECLARE @CONTADOR AS INT
-- ********************************************************************************
-- SETEOS INTERNOS
-- ********************************************************************************
SET @CONTADOR = 0
SET @CONDICION = ''

SET @DIA_INI = @DIA_INI + ' 00:00:00'
SET @DIA_FIN = @DIA_FIN + ' 23:59:59'

-- ********************************************************************************
-- QUERY DE TOTALIZADO GENERALES
-- ********************************************************************************
IF @REPORT = 6
BEGIN
SET @QUERY = '
DECLARE @DIA_INI AS DATETIME
DECLARE @DIA_FIN AS DATETIME
SET @DIA_INI = '+''''+@DIA_INI+''''+
' SET @DIA_FIN ='+''''+@DIA_FIN+''''
SET @QUERY = @QUERY +
'
SELECT A.ID_TRANSACCION,
A.NOMBRE_HIPER,
(SELECT TOP 1 DESCRIPCION FROM VT_OPERADORES WHERE ID_OPERADOR = A.ID_OPERADOR) AS OPERADOR,
(SELECT TOP 1 DESCRIPCION_ORIGEN_PEDIDO FROM VT_ORIGEN_PEDIDO WHERE ID_ORIGEN_PEDIDO = A.ID_ORIGEN_PEDIDO) AS ORIGEN_PEDIDO,
B.NOMBRE_SECCION AS SECCION,
B.COD_ARTICULO AS CODIGO_SAP,
B.IMPORTE_UNITARIO AS PU,
(SELECT DESCRIPCION FROM MOTIVOS_FUENTES WHERE ID_KEY = C.ID_MOTIVO) AS MOTIVO
FROM VT_ENC_TRN A,
VT_DET_TRN B,
VT_ENC_MOTIVO_ANULACION C
WHERE B.ID_TRANSACCION = A.ID_TRANSACCION
AND C.ID_TRANSACCION = A.ID_TRANSACCION
AND A.ID_ESTADO = 7
AND A.ID_ORIGEN_PEDIDO = 1
AND FECHA_FIN_TRANS > @DIA_INI
AND FECHA_FIN_TRANS <= @DIA_FIN
AND '
IF @OPERADOR <> ''
BEGIN
SET @CONDICION = @CONDICION + 'A.ID_OPERADOR = '+''''+ @OPERADOR +''''+ ' AND '
SET @CONTADOR = @CONTADOR + 1
END

IF @ID_HIPER <> ''
BEGIN
SET @CONDICION = @CONDICION + ' A.ID_NRO_HIPER = '+''''+ @ID_HIPER +''''+' AND '
SET @CONTADOR = @CONTADOR + 1
END

IF @ID_ORIGEN_PEDIDO <> ''
BEGIN
SET @CONDICION = @CONDICION + ' A.ID_ORIGEN_PEDIDO = ' + @ID_ORIGEN_PEDIDO + ' AND '
SET @CONTADOR = @CONTADOR + 1
END

IF @SECCION <> ''
BEGIN
SET @CONDICION = @CONDICION + ' B.SECCION = ' + @SECCION + ' AND '
SET @CONTADOR = @CONTADOR + 1
END

IF @COD_ARTICULO <> ''
BEGIN
SET @CONDICION = @CONDICION + ' B.COD_ARTICULO = ' + @COD_ARTICULO + ' AND '
SET @CONTADOR = @CONTADOR + 1
END

IF @MOTIVO <> ''
BEGIN
SET @CONDICION = @CONDICION + ' C.ID_MOTIVO = ' + @MOTIVO + ' AND '
SET @CONTADOR = @CONTADOR + 1
END

IF @CONTADOR >= 1
BEGIN
--SUBSTRING CONDICION SACANDO EL AND
SET @CONDICION = SUBSTRING(@CONDICION,1,LEN(@CONDICION)-4)
END
ELSE
BEGIN
--SUBSTRING CONDICION SACANDO EL AND
SET @QUERY = SUBSTRING(@QUERY,1,LEN(@QUERY)-5)
END

SET @CONDICION = @CONDICION + ' ORDER BY A.ID_TRANSACCION DESC'
SET @QUERY = @QUERY + @CONDICION

EXEC (@query)
END
-- ********************************************************************************
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar