Problema al concatenar cadena varchar(8000)

16/08/2005 - 11:08 por Jesus Suarez | Informe spam
Hola a todos,

Tengo diseñado un procedimiento en T-SQL, que va concatenando a una variable
de tipo varchar(8000) textos, el bucle que va rellenando esa variable es el
recorrido de un cursor, el problema que me ocurre es qeu cuando esta
variable que ira almacenando el texto, llega a tamaño 4000 ya no me permite
concatenar mas texto y la cadena me queda a la mitad, Que es lo que puede
estar ocurriendo?. Muchas gracias por todo

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
16/08/2005 - 11:14 | Informe spam
¿Estás seguro que la variable es de tipo VARCHAR() y no NVARCHAR() ? Lo
digo porque este último tipo de datos se usa para almacenar caracteres
unicode y éstos ocupan dos bits, en vez del único bit que usa un carácter en
VARCHAR


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Jesus Suarez" escribió en el mensaje
news:
Hola a todos,

Tengo diseñado un procedimiento en T-SQL, que va concatenando a una


variable
de tipo varchar(8000) textos, el bucle que va rellenando esa variable es


el
recorrido de un cursor, el problema que me ocurre es qeu cuando esta
variable que ira almacenando el texto, llega a tamaño 4000 ya no me


permite
concatenar mas texto y la cadena me queda a la mitad, Que es lo que puede
estar ocurriendo?. Muchas gracias por todo


Respuesta Responder a este mensaje
#2 Jesus Suarez
16/08/2005 - 11:37 | Informe spam
Hola, si es de tipo varchar te envio la declaracion para que veas. Realmente
me lo corta en 4000 pero si al salir del cursor, le concateno mas texto a
esa variable si que me deja hacerlo, para mi esto es un expediente X y no se
lo que puede estar pasando

declare @s_cuerpo1 varchar(8000)
declare @s_cuerpo2 varchar(8000)
declare @s_cuerpo3 varchar(8000)

while @@fetch_status = 0
begin
print len(@s_cuerpo1)

select @s_cuerpo1=@s_cuerpo1 + "<tr><td>" +
convert(char(10),@fechainiciooferta,103) + "</td><td><a
href=http://www.galiciaempleo.net/candiV...cod=" +
convert(varchar,@idoferta) + " target=_blank><b><font face=verdana size=1>"
+ @cargoVacante + "</font></b></a></td><td><a target=_blank
href=http://www.galiciaempleo.net/candiV...cod=" +
convert(varchar,@idempresa) + " title=Información sobre la empresa
ofertante><font face=verdana size=1>" + @nombreempresa +
"</font></a></td><td><font face=verdana size=1>" + @localidad+
"</font></a></td></tr>"
fetch next from cursor2 into @idempresa, @idoferta, @descripcionoferta,
@fechainiciooferta, @fechafinoferta,@cargovacante,@localidad,
@nombreempresa, @idempresa
end

select @s_cuerpo1 = @s_cuerpo1 + "</table>"
print len(@s_cuerpo1)


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
¿Estás seguro que la variable es de tipo VARCHAR() y no NVARCHAR() ?


Lo
digo porque este último tipo de datos se usa para almacenar caracteres
unicode y éstos ocupan dos bits, en vez del único bit que usa un carácter


en
VARCHAR


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Jesus Suarez" escribió en el mensaje
news:
> Hola a todos,
>
> Tengo diseñado un procedimiento en T-SQL, que va concatenando a una
variable
> de tipo varchar(8000) textos, el bucle que va rellenando esa variable es
el
> recorrido de un cursor, el problema que me ocurre es qeu cuando esta
> variable que ira almacenando el texto, llega a tamaño 4000 ya no me
permite
> concatenar mas texto y la cadena me queda a la mitad, Que es lo que


puede
> estar ocurriendo?. Muchas gracias por todo
>
>


Respuesta Responder a este mensaje
#3 Carlos Sacristán
16/08/2005 - 12:30 | Informe spam
Realmente es raro lo que sucede, ahora mismo no veo qué puede estar
pasando, pero lo que sí te recomiendo es que no hagas lo que estás haciendo,
ya que estás mezclando las funciones de cada capa de tu aplicación. Me
explico:

tal y como lo estás montando, estás haciendo que el motor de la base de
datos sea el encargado de montar código HTML y luego en tu página ASP
simplemente que pinte lo que le llega. Este planteamiento es erróneo, el
motor no debe encargarse de este tipo de transformaciones, sino simplemente
devolver un conjunto de resultados que luego otra capa de tu aplicación lo
convierta en lo que corresponda.

Imagínate que mañana en vez de una aplicación web es una aplicación de
escritorio; ahora mismo estás obligado a reescribir ese procedimiento o bien
crear otro que haga algo parecido. No es muy práctico, verdad?

Sinceramente, no lo hagas así porque te va a acarrear problemas. Además
te quitarás el tener que usar cursores (otra fuente de problemas)


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Jesus Suarez" escribió en el mensaje
news:
Hola, si es de tipo varchar te envio la declaracion para que veas.


Realmente
me lo corta en 4000 pero si al salir del cursor, le concateno mas texto a
esa variable si que me deja hacerlo, para mi esto es un expediente X y no


se
lo que puede estar pasando

declare @s_cuerpo1 varchar(8000)
declare @s_cuerpo2 varchar(8000)
declare @s_cuerpo3 varchar(8000)

while @@fetch_status = 0
begin
print len(@s_cuerpo1)

select @s_cuerpo1=@s_cuerpo1 + "<tr><td>" +
convert(char(10),@fechainiciooferta,103) + "</td><td><a
href=http://www.galiciaempleo.net/candiV...cod=" +
convert(varchar,@idoferta) + " target=_blank><b><font face=verdana


size=1>"
+ @cargoVacante + "</font></b></a></td><td><a target=_blank
href=http://www.galiciaempleo.net/candiV...cod=" +
convert(varchar,@idempresa) + " title=Información sobre la empresa
ofertante><font face=verdana size=1>" + @nombreempresa +
"</font></a></td><td><font face=verdana size=1>" + @localidad+
"</font></a></td></tr>"
fetch next from cursor2 into @idempresa, @idoferta, @descripcionoferta,
@fechainiciooferta, @fechafinoferta,@cargovacante,@localidad,
@nombreempresa, @idempresa
end

select @s_cuerpo1 = @s_cuerpo1 + "</table>"
print len(@s_cuerpo1)


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
> ¿Estás seguro que la variable es de tipo VARCHAR() y no NVARCHAR() ?
Lo
> digo porque este último tipo de datos se usa para almacenar caracteres
> unicode y éstos ocupan dos bits, en vez del único bit que usa un


carácter
en
> VARCHAR
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> "Jesus Suarez" escribió en el mensaje
> news:
> > Hola a todos,
> >
> > Tengo diseñado un procedimiento en T-SQL, que va concatenando a una
> variable
> > de tipo varchar(8000) textos, el bucle que va rellenando esa variable


es
> el
> > recorrido de un cursor, el problema que me ocurre es qeu cuando esta
> > variable que ira almacenando el texto, llega a tamaño 4000 ya no me
> permite
> > concatenar mas texto y la cadena me queda a la mitad, Que es lo que
puede
> > estar ocurriendo?. Muchas gracias por todo
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Maxi
17/08/2005 - 01:16 | Informe spam
Pregunta, de donde ves que la cadena trunco?


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Jesus Suarez" escribió en el mensaje
news:
Hola, si es de tipo varchar te envio la declaracion para que veas.
Realmente
me lo corta en 4000 pero si al salir del cursor, le concateno mas texto a
esa variable si que me deja hacerlo, para mi esto es un expediente X y no
se
lo que puede estar pasando

declare @s_cuerpo1 varchar(8000)
declare @s_cuerpo2 varchar(8000)
declare @s_cuerpo3 varchar(8000)

while @@fetch_status = 0
begin
print len(@s_cuerpo1)

select @s_cuerpo1=@s_cuerpo1 + "<tr><td>" +
convert(char(10),@fechainiciooferta,103) + "</td><td><a
href=http://www.galiciaempleo.net/candiV...cod=" +
convert(varchar,@idoferta) + " target=_blank><b><font face=verdana
size=1>"
+ @cargoVacante + "</font></b></a></td><td><a target=_blank
href=http://www.galiciaempleo.net/candiV...cod=" +
convert(varchar,@idempresa) + " title=Información sobre la empresa
ofertante><font face=verdana size=1>" + @nombreempresa +
"</font></a></td><td><font face=verdana size=1>" + @localidad+
"</font></a></td></tr>"
fetch next from cursor2 into @idempresa, @idoferta, @descripcionoferta,
@fechainiciooferta, @fechafinoferta,@cargovacante,@localidad,
@nombreempresa, @idempresa
end

select @s_cuerpo1 = @s_cuerpo1 + "</table>"
print len(@s_cuerpo1)


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
¿Estás seguro que la variable es de tipo VARCHAR() y no NVARCHAR() ?


Lo
digo porque este último tipo de datos se usa para almacenar caracteres
unicode y éstos ocupan dos bits, en vez del único bit que usa un carácter


en
VARCHAR


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Jesus Suarez" escribió en el mensaje
news:
> Hola a todos,
>
> Tengo diseñado un procedimiento en T-SQL, que va concatenando a una
variable
> de tipo varchar(8000) textos, el bucle que va rellenando esa variable
> es
el
> recorrido de un cursor, el problema que me ocurre es qeu cuando esta
> variable que ira almacenando el texto, llega a tamaño 4000 ya no me
permite
> concatenar mas texto y la cadena me queda a la mitad, Que es lo que


puede
> estar ocurriendo?. Muchas gracias por todo
>
>






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida