Esta es una pregunta de "mejores prácticas". Estamos teniendo discusiones internas sobre este tema y queremos obtener opiniones de un público más amplio.Usar SQL para devolver una cadena JSON
Necesito almacenar mis datos en una tabla tradicional MS SQL Server
con columnas y filas normales. A veces necesito devolver un DataTable
a mi aplicación web, y otras veces debo devolver una cadena JSON
.
Actualmente, devuelvo la tabla a la capa intermedia y la analizo en una cadena JSON
. Esto parece funcionar bien en su mayor parte, pero ocasionalmente toma un tiempo en grandes conjuntos de datos (analizar los datos, no devolver la tabla).
Estoy considerando revisar los procedimientos almacenados para devolver selectivamente una cadena DataTable
o JSON
. Simplemente agregaría un parámetro @isJson bit
al SP.
Si el usuario desea la cadena en lugar de la tabla del SP podría ejecutar una consulta como esta:
DECLARE @result varchar(MAX)
SELECT @result = COALESCE(@results ',', '') + '{id:"' + colId + '",name:"' + colName + '"}'
FROM MyTable
SELECT @result
Esto produce algo como lo siguiente:
{id:"1342",name:"row1"},{id:"3424",name:"row2"}
Por supuesto, el usuario puede también obtiene la tabla pasando false al parámetro @isJson.
Quiero aclarar que el almacenamiento de datos no se ve afectado, ni tampoco ninguna de las vistas existentes y otros procesos. Esto es un cambio SOLAMENTE en los resultados de algunos procedimientos almacenados.
Mis preguntas son:
- Alguien ha probado esto en una aplicación de gran tamaño? Si es así, ¿cuál fue el resultado?
- ¿Qué problemas ha visto/esperaría con este enfoque?
- ¿Existe una forma mejor y más rápida para pasar de la tabla a JSON en SQL Server que no sea modificar el procedimiento almacenado de esta manera o analizar la cadena en el nivel medio?
Cuéntanos más acerca de la capa intermedia. ¿Qué está tomando tanto tiempo? ¿Es código compilado? Debería ser muy posible escribir una aplicación que convierta un juego de registros en JSON y tenga un rendimiento bastante adecuado. – ErikE
Suponiendo que escapa de sus caracteres especiales correctamente, esto es factible ... pero ... ¿por qué lo haría? SQL Server es un terrible motor de análisis de cadenas, y usted tiene un motor XML integrado que siempre puede escupir XML compatible de una manera relativamente eficiente. –
@ErikE La mayoría de las tablas se convierten a json muy rápidamente. Esto solo surgió porque estamos analizando una tabla para FullCalendar. El análisis medio simplemente toma la tabla y usa un foreach para recorrer los campos y las filas para construir la cadena. Probablemente podamos arreglar algunas cosas en el medio para que funcione más rápido, pero si podemos evitar un paso adicional en el proceso haciendo que SQL lo haga ... ¿por qué no? – davids