none
Rescatar nombre tabla y data y generar un string sql RRS feed

  • Pregunta

  • Buenos días ,   tengo un problema , antes que nada no programo mucho en sql , pero tengo que hacer  proyecto en el cual recurro a ustedes , 

    les explico en que consiste  tengo una tabla con 102 columnas , me piden que de la columna 35 a la 102 yo pueda generar un string  de esa concatenación 

    Formato:             {"Origen":"Brasil","Largo":"10cm","Color":"Verde","ORIGENACCESORIO":"YOBEL"}

    Donde:                "Origen" es el nombre de la columna y "Brasil" es el valor que tiene en el registro para dicha columna

    Tabla:                   "STAGE_BI_CORP"."CORP_INT_SAP_MAE_PRODUCTO"

    Columnas:          Desde la 35 al 102

     es decir que pueda generar el string en una concatenacion de "nombredecolumna1":"datodela columna1","nombredecolumna2":"datodela columna2"......

    me han dicho que tengo que generar una tabla de control  y  generar un loop , pero no le encuentro la forma 

    quería ver si me pueden ayudar con esto 

    muchas gracias

    miércoles, 8 de noviembre de 2017 16:38

Respuestas

  • ¿Qué versión de SQL Server es? ¿Al menos la 2016? Si es así, puedes hacer un "Select .... from laTabla FOR JSON". Eso te genera los resultados en formato JSON, que casualmente resulta coincidir precisamente con el formato que te piden. Obviamente, en donde te he puesto .... tienes que meter los nombres de las columnas 35 a 102. Hay una forma sencilla de generar esa lista de nombres: Usa SSMS para pedirle que te escriba un select de la tabla, y en ese select baja hasta la fila 35 y copia desde ahí hasta el final.

    Si tu servidor es más antiguo que el 2016, no tiene el "FOR JSON". Pero sí que tendrá el "FOR XML", salvo que sea super-antiguo. Una vez que tengas el string en formato XML, con un poco de habilidad puedes usar las funciones de manipulación de cadenas tales como STUFF y REPLACE para cambiar los < y > por " y : de forma que se transforme el XML en JSON.


    miércoles, 8 de noviembre de 2017 19:31