nVarchar

03/11/2004 - 01:09 por Marco Miramontes | Informe spam
Saludos a todos, agradecerían mucho si alguien me pudiera ayudar a
despejar una duda. Actualmente tengo una tabla de la cual tengo se tienen
varios campos:

código

Descripción

Activo



Y este es el script:

SET @Sql = "SELECT COLR_CODE as Col0, COLR_DESC as Col1, "
SET @Sql = @Sql + " CASE WHEN COLORANT.COLR_ACTIVE = 1 THEN '"+ @AC + "'
ELSE '" + @IN + "' END as Col2, "
SET @Sql = @Sql + " CONVERT(CHAR(1),COLR_ACTIVE) as Col3 "
SET @Sql = @Sql + " FROM COLORANT "



IF @SORT = 0
SELECT @Sql = @Sql + " ORDER BY COLR_CODE "
ELSE
SELECT @Sql = @Sql + " ORDER BY COLR_DESC "



EXEC(@Sql)

El problema es que la variable @AC, @IN y @Sql son del tipo nVarchar,
pero al momento de ejecutar esta sentencia me despliega en la columna Col2
signos de interrogación ya que la variable @AC tiene información en Ruso
"??????", pero si realizo la misma consulta pero sin concatenación si me
muestra los caracteres, Sabes alguien por que esta pasando esto ?...



Gracias

Preguntas similare

Leer las respuestas

#1 Paulino Padial
03/11/2004 - 09:20 | Informe spam
Prueba esto y me dices, porque estoy mirando y he pensado varias cosas.

SET @Sql = "SELECT COLR_CODE as Col0, COLR_DESC as Col1, "
SET @Sql = @Sql + " CASE WHEN COLORANT.COLR_ACTIVE = 1 THEN /*ESTO


ES LO NUEVO*/N'"+ @AC + "'
ELSE '" + @IN + "' END as Col2, "
SET @Sql = @Sql + " CONVERT(CHAR(1),COLR_ACTIVE) as Col3 "
SET @Sql = @Sql + " FROM COLORANT "



IF @SORT = 0
SELECT @Sql = @Sql + " ORDER BY COLR_CODE "
ELSE
SELECT @Sql = @Sql + " ORDER BY COLR_DESC "



EXEC(@Sql)



Paulino Padial
Microsoft MCSD & MCT
Administrador de Bases de Datos

Marco Miramontes wrote:
Saludos a todos, agradecerían mucho si alguien me pudiera ayudar a
despejar una duda. Actualmente tengo una tabla de la cual tengo se tienen
varios campos:

código

Descripción

Activo



Y este es el script:

SET @Sql = "SELECT COLR_CODE as Col0, COLR_DESC as Col1, "
SET @Sql = @Sql + " CASE WHEN COLORANT.COLR_ACTIVE = 1 THEN '"+ @AC + "'
ELSE '" + @IN + "' END as Col2, "
SET @Sql = @Sql + " CONVERT(CHAR(1),COLR_ACTIVE) as Col3 "
SET @Sql = @Sql + " FROM COLORANT "



IF @SORT = 0
SELECT @Sql = @Sql + " ORDER BY COLR_CODE "
ELSE
SELECT @Sql = @Sql + " ORDER BY COLR_DESC "



EXEC(@Sql)

El problema es que la variable @AC, @IN y @Sql son del tipo nVarchar,
pero al momento de ejecutar esta sentencia me despliega en la columna Col2
signos de interrogación ya que la variable @AC tiene información en Ruso
"??????", pero si realizo la misma consulta pero sin concatenación si me
muestra los caracteres, Sabes alguien por que esta pasando esto ?...



Gracias


Respuesta Responder a este mensaje
#2 ulises
03/11/2004 - 13:46 | Informe spam
Adicional a lo indicado por Paulino, no veo la necesidad de
que uses sql dinámico para realizar esta operación, si no
he leido mal podrías hacer :

IF @SORT = 0
SELECT COLR_CODE as Col0,
COLR_DESC as Col1,
CASE WHEN COLORANT.COLR_ACTIVE = 1
THEN @AC ELSE @IN END as Col2,
CONVERT(CHAR(1),COLR_ACTIVE) as Col3
FROM COLORANT
ORDER BY COLR_CODE
ELSE
SELECT COLR_CODE as Col0,
COLR_DESC as Col1,
CASE WHEN COLORANT.COLR_ACTIVE = 1
THEN @AC ELSE @IN END as Col2,
CONVERT(CHAR(1),COLR_ACTIVE) as Col3
FROM COLORANT
ORDER BY COLR_DESC

Saludos,
Ulises

Prueba esto y me dices, porque estoy mirando y he pensado


varias cosas.

SET @Sql = "SELECT COLR_CODE as Col0, COLR_DESC as Col1, "
> SET @Sql = @Sql + " CASE WHEN COLORANT.COLR_ACTIVE = 1


THEN /*ESTO
ES LO NUEVO*/N'"+ @AC + "'
> ELSE '" + @IN + "' END as Col2, "
> SET @Sql = @Sql + " CONVERT(CHAR(1),COLR_ACTIVE) as Col3 "
> SET @Sql = @Sql + " FROM COLORANT "
>
>
>
> IF @SORT = 0
> SELECT @Sql = @Sql + " ORDER BY COLR_CODE "
> ELSE
> SELECT @Sql = @Sql + " ORDER BY COLR_DESC "
>
>
>
> EXEC(@Sql)

Paulino Padial
Respuesta Responder a este mensaje
#3 Paulino Padial
03/11/2004 - 14:06 | Informe spam
Si, usar sql dinamico tiene muchos problemas de sql inyection... No es una
buena opcion.





"ulises" escribió en el mensaje
news:169a01c4c1a3$1bd76ef0$
Adicional a lo indicado por Paulino, no veo la necesidad de
que uses sql dinámico para realizar esta operación, si no
he leido mal podrías hacer :

IF @SORT = 0
SELECT COLR_CODE as Col0,
COLR_DESC as Col1,
CASE WHEN COLORANT.COLR_ACTIVE = 1
THEN @AC ELSE @IN END as Col2,
CONVERT(CHAR(1),COLR_ACTIVE) as Col3
FROM COLORANT
ORDER BY COLR_CODE
ELSE
SELECT COLR_CODE as Col0,
COLR_DESC as Col1,
CASE WHEN COLORANT.COLR_ACTIVE = 1
THEN @AC ELSE @IN END as Col2,
CONVERT(CHAR(1),COLR_ACTIVE) as Col3
FROM COLORANT
ORDER BY COLR_DESC

Saludos,
Ulises

Prueba esto y me dices, porque estoy mirando y he pensado


varias cosas.

SET @Sql = "SELECT COLR_CODE as Col0, COLR_DESC as Col1, "
> SET @Sql = @Sql + " CASE WHEN COLORANT.COLR_ACTIVE = 1


THEN /*ESTO
ES LO NUEVO*/N'"+ @AC + "'
> ELSE '" + @IN + "' END as Col2, "
> SET @Sql = @Sql + " CONVERT(CHAR(1),COLR_ACTIVE) as Col3 "
> SET @Sql = @Sql + " FROM COLORANT "
>
>
>
> IF @SORT = 0
> SELECT @Sql = @Sql + " ORDER BY COLR_CODE "
> ELSE
> SELECT @Sql = @Sql + " ORDER BY COLR_DESC "
>
>
>
> EXEC(@Sql)

Paulino Padial
Respuesta Responder a este mensaje
#4 Marco Miramontes
03/11/2004 - 18:15 | Informe spam
La cusetion es por que cuando solo tradusco los encabezados de las
columnas y no los campos si funciona

"ulises" wrote in message
news:169a01c4c1a3$1bd76ef0$
Adicional a lo indicado por Paulino, no veo la necesidad de
que uses sql dinámico para realizar esta operación, si no
he leido mal podrías hacer :

IF @SORT = 0
SELECT COLR_CODE as Col0,
COLR_DESC as Col1,
CASE WHEN COLORANT.COLR_ACTIVE = 1
THEN @AC ELSE @IN END as Col2,
CONVERT(CHAR(1),COLR_ACTIVE) as Col3
FROM COLORANT
ORDER BY COLR_CODE
ELSE
SELECT COLR_CODE as Col0,
COLR_DESC as Col1,
CASE WHEN COLORANT.COLR_ACTIVE = 1
THEN @AC ELSE @IN END as Col2,
CONVERT(CHAR(1),COLR_ACTIVE) as Col3
FROM COLORANT
ORDER BY COLR_DESC

Saludos,
Ulises

Prueba esto y me dices, porque estoy mirando y he pensado


varias cosas.

SET @Sql = "SELECT COLR_CODE as Col0, COLR_DESC as Col1, "
> SET @Sql = @Sql + " CASE WHEN COLORANT.COLR_ACTIVE = 1


THEN /*ESTO
ES LO NUEVO*/N'"+ @AC + "'
> ELSE '" + @IN + "' END as Col2, "
> SET @Sql = @Sql + " CONVERT(CHAR(1),COLR_ACTIVE) as Col3 "
> SET @Sql = @Sql + " FROM COLORANT "
>
>
>
> IF @SORT = 0
> SELECT @Sql = @Sql + " ORDER BY COLR_CODE "
> ELSE
> SELECT @Sql = @Sql + " ORDER BY COLR_DESC "
>
>
>
> EXEC(@Sql)

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