Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

variables en SP

Estas en el tema de variables en SP en el foro de SQL Server en Foros del Web. buenas, estoy creando un procedimiento almacenado y me quedan las dudas con las variables, estoy realizando un buscador, por ende recibe varios parametros, pero estos ...
  #1 (permalink)  
Antiguo 28/11/2005, 08:50
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
variables en SP

buenas, estoy creando un procedimiento almacenado y me quedan las dudas con las variables,
estoy realizando un buscador, por ende recibe varios parametros, pero estos parametros no son obligatorios
por ejemplo sean:
@patente,@marca,@color

si no viene ninguno de los 3 parametros seria un select normal, osea
select data1,data2... from tabla

pero si viene uno comienzo a poner condiciones en el where como patente = @patente,

ahora como pregunto si vienen los parametros????
pq si yo llego y armo el select * from tabla where patente=@patente and marca=@marca and color=@color

podria no traerme ningun dato,
entonces deberia preguntar algo como
if (patente != "") ???? o algo asi?
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #2 (permalink)  
Antiguo 28/11/2005, 10:02
 
Fecha de Ingreso: septiembre-2005
Mensajes: 43
Antigüedad: 18 años, 7 meses
Puntos: 0
Otra solución seria que la consulta la metieras en un string
y este lo ejecutas.

Ejemplo

Create Proc SP_Ejem
@Opt1 Char(2),
@Opt2 Char(2) ,
@Opt3 Char(2)
As
Declare
@SqlText Varchar(100)
Begin
Select @SqlText = 'Select * From Tabla1 (Nolock) '

If @Opt1 <> ''
Select @SqlText = @SqlText + ' Where Camp1 = ' + @Opt1

If @Opt2 <> ''
If @Opt1 <> ''
Select @SqlText = @SqlText + ' And Camp1 = ' + @Opt2
Else
Select @SqlText = @SqlText + ' Where Camp1 = ' + @Opt2

If @Opt3 <> ''
If @Opt1 <> '' or @Opt2 <> ''
Select @SqlText = @SqlText + ' And Camp1 = ' + @Opt3
Else
Select @SqlText = @SqlText + ' Where Camp1 = ' + @Opt3

exec(@SqlText)
End



-- Es algo así

Atte
-------------------------------
Gabriel Sanchez
México
[email protected]
  #3 (permalink)  
Antiguo 28/11/2005, 10:10
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
sip, algo asi lo intente pero me falto el exec!!
gracias, solo por curiosidad, defines la varible sqltext de largo 100, que pasaria si supera los 100?
se podria mejor poner q es varchar pero si largo???
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #4 (permalink)  
Antiguo 28/11/2005, 17:28
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Si se pasa de 100 cars tendrás un bonito error al no pasar el parser por algún error en la sentencia... a menos que se corte en un punto donde el parser la acepte (por ejemplo justo antes de un order by)
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 29/11/2005, 05:31
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
entonces es mejor definirlo varchar solamente sin largo?? o es mejor poner otro tipo de variable?
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #6 (permalink)  
Antiguo 30/11/2005, 12:02
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Si usas varchar sin definir longitud tomará una longitud por default, más no que no tenga límite. Serán algo como 200 cars. no recuerdo ahora exactamente.

Lo mejor es usar un lápiz y/o unas pocas consultas que te darán la longitud habitual de tu SQL generado, incrementalo un poco y listo. Algo que te será util es:

PRINT LEN(@sql)
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #7 (permalink)  
Antiguo 30/11/2005, 12:04
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
amm ok... gacias mithradir!!
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #8 (permalink)  
Antiguo 01/12/2005, 06:10
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
juaz!! no puedo me paso de los 200 y me aparece un lindo error!!!
es posible crear la variable como text??
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #9 (permalink)  
Antiguo 01/12/2005, 11:46
 
Fecha de Ingreso: septiembre-2005
Mensajes: 43
Antigüedad: 18 años, 7 meses
Puntos: 0
Yo utilizo ese metodo
y claro si se que mi consulta es superior
a 100 caracteres pues simplemente de dejo

Varchar(200)
Varchar(300)
.
.
.
Varchar(5000) Realice un prueba un poco salida y jalo definido así
  #10 (permalink)  
Antiguo 01/12/2005, 12:09
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
ammm lo probe y funca, pense q lo limitaba a 200 caracteres si o si!!

funciono thank men!!
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #11 (permalink)  
Antiguo 01/12/2005, 15:14
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
VARCHAR llega a máximo 8000 cars, y NVARCHAR a 4000. Obviamente, usar estas longitudes para un 'SELECT * FROM tabla' es un desperdicio grande, empieza con esta longitud para pruebas, pero calcula la longitud de tu sentencia y reduce el valor en base a ello.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:21.