sentencia para condicionar variables
Publicado por lucas verdugo (5 intervenciones) el 14/04/2011 20:59:49
Estimados todos:
Estoy intentando preparar una consulta dinamica que contiene 4 variables de busqueda en una misma base de datos:
declare @numero_documento as float
declare @patente as varchar(1000)
declare @motor as varchar(1000)
declare @chasis as varchar(1000)
set @numero_documento = 25024032
set @patente = 'ICV-535'
set @motor = 'T85013338'
set @chasis = '8AGSB19Y0AR108825'
necesito unificar los resultados con UNIONES
select
'asegurado' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,DOC_ASE) = @numero_documento
union
select
'propietario' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,DOC_PRO) = @numero_documento
union
select
'no asigna' as persona,
'asegurado' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where PAT_ASE = @patente
union
select
'no asigna' as persona,
'tercero' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where PAT_TER = @patente
UNION
select
'no asigna' as persona,
'no asigna' as patente,
'asegurado' as motor,
'no asigna' as chasis,
* from TABLA
where NUM_MOT_ASE = @motor
union
select
'no asigna' as persona,
'no asigna' as patente,
'tercero' as motor,
'no asigna' as chasis,
* from TABLA
where NUM_MOT_TER = @motor
UNION
select
'no asigna' as persona,
'no asigna' as patente,
'no asigna' as motor,
'asegurado' as chasis,
* from TABLA
where NUM_CHA_ASE = @chasis
union
select
'no asigna' as persona,
'no asigna' as patente,
'no asigna' as motor,
'tercero' as chasis,
* from TABLA
where NUM_CHA_TER = @chasis
El caso es que MUCHAS VECES SOLO ME PIDEN CONSULTAR POR UN SOLO PARAMETRO Y NO POR TODOS AL MISMO TIEMPO.
el caso sería que cuando:
set @numero_documento = 25024032 (este completo)
set @patente = '' (no tenga el dato)
set @motor = '' (no tenga el dato)
set @chasis = '' (no tenga el dato)
me ejecute solamente la parte de la consulta referente a tipo de documento.
para condicionar la busqueda pense en storear los procedimientos por separado, declarando la variable pero no seteandola luego:
declare @numero_documento as float
set @numero_documento = '22222222'
exec (consulta_persona)
en el ejemplo de documento cree este procedimiento:
create procedure consulta_persona as
declare @numero_documento as float
select
'asegurado' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,DOC_ASE) = @numero_documento
union
select
'propietario' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,DOC_PRO) = @numero_documento
union
select
'conductor' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,NUM_DOC_CON) = @numero_documento
union
select
'tercero' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,NUM_DOC_TER) = @numero_documento
union
select
'productor' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from FROM TABLA
where convert(float,NUM_DOC_PROD) = @numero_documento)
end
ETC
ETC
ETC
go
EL TEMA ES QUE EL PROCEDURE NO ME TOMO EL DATO DE LA VARIABLE DECLARADA ANTERIORMENTE
COMO PUEDO SOLUCIONAR ESTE PROBLEMA?
gracias
Estoy intentando preparar una consulta dinamica que contiene 4 variables de busqueda en una misma base de datos:
declare @numero_documento as float
declare @patente as varchar(1000)
declare @motor as varchar(1000)
declare @chasis as varchar(1000)
set @numero_documento = 25024032
set @patente = 'ICV-535'
set @motor = 'T85013338'
set @chasis = '8AGSB19Y0AR108825'
necesito unificar los resultados con UNIONES
select
'asegurado' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,DOC_ASE) = @numero_documento
union
select
'propietario' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,DOC_PRO) = @numero_documento
union
select
'no asigna' as persona,
'asegurado' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where PAT_ASE = @patente
union
select
'no asigna' as persona,
'tercero' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where PAT_TER = @patente
UNION
select
'no asigna' as persona,
'no asigna' as patente,
'asegurado' as motor,
'no asigna' as chasis,
* from TABLA
where NUM_MOT_ASE = @motor
union
select
'no asigna' as persona,
'no asigna' as patente,
'tercero' as motor,
'no asigna' as chasis,
* from TABLA
where NUM_MOT_TER = @motor
UNION
select
'no asigna' as persona,
'no asigna' as patente,
'no asigna' as motor,
'asegurado' as chasis,
* from TABLA
where NUM_CHA_ASE = @chasis
union
select
'no asigna' as persona,
'no asigna' as patente,
'no asigna' as motor,
'tercero' as chasis,
* from TABLA
where NUM_CHA_TER = @chasis
El caso es que MUCHAS VECES SOLO ME PIDEN CONSULTAR POR UN SOLO PARAMETRO Y NO POR TODOS AL MISMO TIEMPO.
el caso sería que cuando:
set @numero_documento = 25024032 (este completo)
set @patente = '' (no tenga el dato)
set @motor = '' (no tenga el dato)
set @chasis = '' (no tenga el dato)
me ejecute solamente la parte de la consulta referente a tipo de documento.
para condicionar la busqueda pense en storear los procedimientos por separado, declarando la variable pero no seteandola luego:
declare @numero_documento as float
set @numero_documento = '22222222'
exec (consulta_persona)
en el ejemplo de documento cree este procedimiento:
create procedure consulta_persona as
declare @numero_documento as float
select
'asegurado' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,DOC_ASE) = @numero_documento
union
select
'propietario' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,DOC_PRO) = @numero_documento
union
select
'conductor' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,NUM_DOC_CON) = @numero_documento
union
select
'tercero' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from TABLA
where convert(float,NUM_DOC_TER) = @numero_documento
union
select
'productor' as persona,
'no asigna' as patente,
'no asigna' as motor,
'no asigna' as chasis,
* from FROM TABLA
where convert(float,NUM_DOC_PROD) = @numero_documento)
end
ETC
ETC
ETC
go
EL TEMA ES QUE EL PROCEDURE NO ME TOMO EL DATO DE LA VARIABLE DECLARADA ANTERIORMENTE
COMO PUEDO SOLUCIONAR ESTE PROBLEMA?
gracias
Valora esta pregunta


0