none
utilizar variable dentro de value() xml RRS feed

  • Pregunta

  • Buenas que tal, estoy haciendo un store procedure que recibe como parametro un xml con la siguiente estructura:

     <RESOLVERACTGEMA_MODIF_I_GP>
    - <HEAD_SGN>
      <SERVICIO>RESOLVERACTGEMA_MODIF</SERVICIO>
      <USUARIO>400000</USUARIO>
      <MAX_REGS>9999</MAX_REGS>
      <MSGID />
      <COD_RET>0</COD_RET>
      <DESC_ERROR />
      <MSG_ERROR />
      </HEAD_SGN>
    - <BODY_SGN>

    <CANT_REG>4</CANT_REG>
    - <REG_TECNICA>
      <CARACTERISTICA>ANW</CARACTERISTICA>
      <VALOR>count201</VALOR>
      </REG_TECNICA>
    - <REG_TECNICA>
      <CARACTERISTICA>PLACA_MODELO</CARACTERISTICA>
      <VALOR>CCI1</VALOR>
      </REG_TECNICA>
    - <REG_TECNICA>
      <CARACTERISTICA>CENTRAL_DLC</CARACTERISTICA>
      <VALOR>456</VALOR>
      </REG_TECNICA>
    - <REG_TECNICA>
      <CARACTERISTICA>DLC_CODIGO</CARACTERISTICA>
      <VALOR>7005</VALOR>
      </REG_TECNICA>
      </BODY_SGN>
      </RESOLVERACTGEMA_MODIF_I_GP>'

    Dentro del sp leo los datos de dicho xml con la funcion value().

    @ordenXml es la variable xml que se pasa como parametro.

    Por ejemplo:

    @ordenXml.value(N'(/RESOLVERACTGEMA_MODIF_I_GP/BODY_SGN/REG_TECNICA/CARACTERISTICA)[1]' , 'VARCHAR(MAX)' );

    y obtengo el valor: ANW

    El problema radica en que como la cantidad de registros es variable (depende del elemento CANT_REG), intento leer estos campos con un while con un contador, de la siguiente manera:

    declare @posicion nvarchar(2)

    set @posicion='1'

    @ordenXml.value(N'(/RESOLVERACTGEMA_MODIF_I_GP/BODY_SGN/REG_TECNICA/CARACTERISTICA)['+@posicion+']' , 'VARCHAR(MAX)' );

    Pero me sale el siguiente error:

    El argumento 1 del método "value" de tipo de datos XML debe ser un literal de cadena.

    ¿Como puedo hacer para utilizar una variable dentro del argumento de value()?

    Desde ya muchas gracias.

    lunes, 3 de septiembre de 2012 15:29

Respuestas