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

Consulta SQL

Estas en el tema de Consulta SQL en el foro de SQL Server en Foros del Web. Buenos Días a todos, tengo una duda en una consulta que hago en sql.. El asunto está asi mas o menos... Hago una búsqueda en ...
  #1 (permalink)  
Antiguo 07/10/2010, 10:32
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Consulta SQL

Buenos Días a todos, tengo una duda en una consulta que hago en sql.. El asunto está asi mas o menos...

Hago una búsqueda en una BD (1) en la que el SP podría recibir o no ciertos parámetros, dentro de estos parámetros van un numero de codigos que estan en otra BD (2) instanciada en el mismo servidor de esta otra BD (1) a la que le hago la consulta, estos codigos se los envio concatenados con comas (,).

El codigo es mas o menos asi:



declare @sql VARCHAR (MAX)
set @sql = 'SELECT * FROM VTAS_PROYECTO_ENCUESTA
WHERE (FechaTramite >= ''' + convert(varchar, @FechaInicio, 101) + ''') and
(FechaTramite <= ''' + convert(varchar, @FechaFinal, 101) + ''')'
--Filtro Provincia
if (@CodProvincia <> 0)
begin
set @sql = @sql + ' and (CodProvincia = ''' + convert(varchar, @CodProvincia) + ''')'
end
--Filtro Canton
if (@CodCanton <> 0)
begin
set @sql = @sql + ' and (CodCanton = ''' + convert(varchar, @CodCanton) + ''')'
end
--Filtro Distrito
if (@CodDistrito <> 0)
begin
set @sql = @sql + ' and (CodDistrito = ''' + convert(varchar, @CodDistrito) + ''')'
end
if (@ProyectoEscogido <> '')
begin
set @sql = @sql + ' and (NumProyecto IN (' + @ProyectoEscogido + '))'
end
exec (@sql)

el asunto es que este parametro @ProyectoEscogido va a seguir creciendo y tengo entendido que el varchar tiene un maximo de 8000 por lo que me daria un error, no se si tienen alguna otra sugerencia de como hacerlo... muchas gracias
  #2 (permalink)  
Antiguo 07/10/2010, 18:18
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulta SQL

gtrigueros

Primero dinos en que version piensas ejecutar este query, por lo de VARCHAR(MAX), supongo que es 2005 o superior.

De ser asi, deberias consular en tu ayuda en linea el maximo por un VARCHAR(MAX), por otro lado, dejar de utilzar EXEC(SQL) y utilizar EXEC SP_EXECUTESQL @MyNVarchar

No hagas comparaciones de @CodDistrito <> 0, si la variable @CodDistrito es numerica, es mucho mas eficiente: @CodDistrito > 0

Y por lo que cuentas que tienes que estar modificando tu codigo, siento desde mi punto de vista personal, que hay algun problema con el diseño de tu sistema.
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 12/10/2010, 08:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Consulta SQL

Buenos días gtrigueros, te comento que varchar y varchar(max) son en realidad dos tipos diferentes de datos, no debes confundirlos. El tipo de datos varchar SI TIENE UNA CAPACIDAD MÁXIMA DE 8000 BYTES, es decir no puedes hacer algo como esto:

Código:
DECLARE @variable varchar(8001)
Ahora bien, el tipo de datos varchar(max) no equivale a un varchar(8000), sino que tiene una capacidad de almacenamiento de 2^31-1 bytes, lo que equivale a 2,147,483,648 caracteres, por lo que no deberías preocuparte por la capacidad de almacenamiento.

Ahora bien, si como comentas tu parámetro @ProyectoEscogido va a crecer mucho no es recomendable que utilices la cláusula IN, ya que también esto puede alentar mucho tu consulta. Te dejo una liga donde se implementa una función split, la cual te regresa una tabla a partir de una cadena separada por delimitadores, sólo tendrías que tener cuidado con los parámetros, ya que la función recibe dos varchar(8000)

http://geekswithblogs.net/AngelEyes/...12/111504.aspx

de tal manera que puedas hacer un INNER JOIN en lugar del IN, algo así:

Código:
SELECT * FROM VTAS_PROYECTO_ENCUESTA T1
INNER JOIN 
(
select * from dbo.fnSplit(@ProyectoEscogido, ',')
) T2 ON T1.NumProyecto = T2.Item
Haz también caso a las recomendaciones que te da el compañero Iislas.

Saludos.
Leo.
  #4 (permalink)  
Antiguo 12/10/2010, 09:50
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulta SQL

Como dices los "gueros", AWESOME !!, Leonardo, saludos
__________________
MCTS Isaias Islas

Etiquetas: sql
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 06:59.