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.