¿Cómo puedo enviar una matriz al procedimiento almacenado? ¿Cuál es el mejor formato de datos si lo envío desde JS?

¿Cómo puedo enviar una matriz al procedimiento almacenado? Quiero enviarlo desde JS al procedimiento almacenado. ¿Y cuál es el mejor formato de datos para esta tarea?

preguntado el 01 de febrero de 12 a las 14:02

ok afaik, puedes usar la API de base de datos web de HTML5 documentos para permitir que el cliente interactúe con una base de datos en el lado del cliente. Para permitir que el cliente interactúe con una base de datos remota, tendría que implementar un lenguaje del lado del servidor como Java / PHP para actuar como intermediario entre el cliente y la base de datos. -

4 Respuestas

SQL 2008 admite parámetros con valores de tabla, por lo que puede pasar una tabla de datos como parámetro a un sproc. Las formas comunes antes de esto, eran como ya se mencionó, a través de un parámetro CSV o XML.

Referencia de MSDN

Respondido 01 Feb 12, 19:02

La gente dice que puede haber un problema con el recuento de símbolos: "No puede haber más de 8000 símbolos en una cadena de este tipo". ¿Es correcto? ¿Es una buena idea usar CSV en lugar de XML debido a esto (no se supone que use esta cadena en ningún otro lugar)? - Anton Lyhin

@Anton No estoy seguro de a qué se refiere: 8000 es el tamaño más grande que puede definir para un VARCHAR antes de tener que VARCHAR (MAX), que admite hasta 2 GB de texto. El tipo de datos XML también admite hasta 2 GB. El problema con estos es que luego debe analizar / triturar los valores. Por lo tanto, recomendaría mirar el enfoque de parámetros con valores de tabla. Comparé el rendimiento de los 3 en mi blog aquí: adathedev.co.uk/2010/02/… - AdaTheDev

Una pregunta más. ¿Cuál es la mejor manera de hacer el trabajo: llamar a sproc con array param o sproc muchas veces una por una en una transacción? Gracias. - Anton Lyhin

Pasaría un lote y lo haría en menos llamadas, no una a la vez. - AdaTheDev

Con MS SQL debería poder consumirlo como delimitado por comas.

Respondido 01 Feb 12, 18:02

He usado XML para pasar matrices de datos al servidor SQL en el pasado, y funciona bastante bien con tipos de datos XML y XQuery.

Respondido 01 Feb 12, 18:02

Aquí hay un ejemplo simple que usa un parámetro de entrada CSV para el proceso almacenado.

create proc dbo.ListCustomers
(
    @CustomerIDs varchar(MAX)
)
as
begin

-- convert paramter to xml
declare @XmlStr varchar(MAX)
set @XmlStr = '<R><I ID="' + replace(@CustomerIDs, ',', '"></I><I ID="') + '"></I></R>'

-- table variable that holds the ID's
declare @IdTable table (ID int)

-- load the XML document and insert id's to @IdTable
declare @XmlDoc int
exec sp_xml_preparedocument @XmlDoc out, @XmlStr
insert into @IdTable select ID from openxml(@XmlDoc, '/R/I',1) with (ID int)
exec sp_xml_removedocument @XmlDoc


-- use @IdTable in your query
select c.*
from tblCustomer c
  join @IdTable as I on c.CustomerID = I.ID 

end
go

-- usage:
-- exec ListCustomers '3823,3838,3845,3925,4051'

Respondido 01 Feb 12, 19:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.