Hola Patricia, esa pregunta la lance hace unos dias en esta lista y en GUFA y 
respondieron lo siguiente:  

Sigue el hilo que ahí te explican mas o menos como hacer;

*******************************************************

----- Mensaje reenviado ----
De: "Alejandro, Newbery" <[email protected]>
Para: GUFA List Member <[email protected]>
Enviado: jueves, 27 de agosto, 2009 12:44:48
Asunto: [GUFA] [GUFA] Pasar una tabla como parámetro a un procedimiento 
almacenado MSSQL????


No, no lo convierte automáticamente, el SP seria mas o menos asi:
 
CREATEPROCEDURE Ins_RemitoVentas
(
      @remitoid         char(15),
      -- Aqui irian todos los demas parametros de la cabecera
      @detalle          xml,  
AS
begin
 
      set nocount on
 
      -- declare variables 
      declare @iHandleXml     int
      declare @iReturn  int
 
      -- inicializo xml document
      exec @iReturn = sp_xml_preparedocument @iHandleXml output, @detalle
      if @iReturn != 0
            begin
                  raiserror('No se pudo obtener un controlador válido para el 
documento xml proporcionado.',16, 1)
                  return(1)
            end
 
      begin try
            
            begin tran
 
                  -- Primero insertas la cabecera
                  insert into RemitoVentas( remitoid, ....demas campos)
                        values( @remitoid, ....demas parámetros)
 
                  -- Aqui agregarias el detalle desde el xml
                  insertinto RemitoVentasDetalle( itemid, remitoid, productoid, 
cdadremit)
                        select itemid, @remitoid, productoid, cdadremit
                        from openxml(@ihandlexml, '/VFPDataSet/detalle', 2) 
                        with ( itemid char(15), productoid char(15), cdadremit 
numeric(18, 6))
 
                commit tran
 
                  exec sp_xml_removedocument @iHandleXml
 
      end try
      begin catch
 
            exec sp_xml_removedocument @iHandleXml
 
            -- roll back la transaction.
            rollback transaction
 
            -- Despues del apropiado rollback, envio 
        -- información del error.
            s...@errormessage = ERROR_MESSAGE();
 
        raiserror(@ErrorMessage, -- Message text.
                   16, -- Severity.
                   1 -- State.
                   )
            return(1)
 
      end catch
 
end
GO
 
 
 
El comando que utilizas desde SQL es OPENXML, la salida la tratas como una 
tabla normal. Lo unico que debes tener en cuenta cuando generas el parámetro 
XML desde VFP (con cursortoxml() o xmladapter mi preferido), es el nombre del 
alias, ya que el tag de tabla lo arma con ese nombre en el XML. Eso es lo que 
debes poner en OPENXM(@ihandlexml, '/VFPDataSet/nombre_de_alias_en_minusculas', 
2).
 
Espero te sirva.
 
Saludos,
 
Alejandro.
 
Nota: el ejemplo que te escribi arriba es en sql2005/2008. Esta técnica también 
funciona en 2000, pero el control de errores es diferente ya que no contas con 
trycatch.

________________________________

De:[email protected] [mailto:[email protected]] En nombre de Alfonso Arias Lemas
Enviado el: Jueves, 27 de Agosto de 2009 10:12 a.m.
Para: GUFA List Member
Asunto: [GUFA] Re: [GUFA] RE: [GUFA] Re: [GUFA] RE: [GUFA] Pasar una tabla como 
parámetro a un procedimiento almacenado MSSQL????
 
ok Alejandro ese es el caso que yo tengo, es una factura con sus items, voy a 
estudiarme lo del parámetro XML 
Mas me dices que cuando lo toma es SP automaticamente lo convierte en una 
tabla????
 
Saludos,
   Alfonso
 

________________________________

De:"Alejandro, Newbery" <[email protected]>
Para: GUFA List Member <[email protected]>
Enviado: jueves, 27 de agosto, 2009 10:51:18
Asunto: [GUFA] RE: [GUFA] Re: [GUFA] RE: [GUFA] Pasar una tabla como parámetro 
a un procedimiento almacenado MSSQL????
La forma mas eficiente y simple es pasar un parémetro de tipo XML, dentro del 
SP lo lees como si fuese una tabla más. Seria un caso tipico de maestro 
detalle, por ejemplo una Factura y sus items.
 
Saludos
Alejandro.

________________________________

De:[email protected] [mailto:[email protected]] En nombre de Alfonso Arias Lemas
Enviado el: Miércoles, 26 de Agosto de 2009 09:49 p.m.
Para: GUFA List Member
Asunto: [GUFA] Re: [GUFA] RE: [GUFA] Pasar una tabla como parámetro a un 
procedimiento almacenado MSSQL????
 
Hola Jose,
Lo que quiero hacer es parecido a cuando hago un insert de un registro en MSSQL 
utilizando un procedimiento almacenado que transfiero por ejemplo sólo los 
valores de los campos y el procedimiento se encarga del resto y de las 
validaciones. Eso mismo pero en vez de transferir valores de un sólo registro 
poder transferir la tabla completa, del resto de las validaciones se encarga el 
procedimiento almacenado.
Todo esto para garantizar que la transacción se termine de forma efectiva 
porque me ha pasado que utilizando 
 
SQLSETPROP(m.HCONEXION,'Transactions',2)  && Transacción manual
 
si no llega al final del SQLCOMMIT o de SQLROLLBACK y el sistema se bloquea o 
termina de forma anormal antes de concluir no se actualizan todas las tablas en 
MSSQL .
 
Saludos,
   Alfonso
 

________________________________

De:Jose Paez <[email protected]>
Para: GUFA List Member <[email protected]>
Enviado: miércoles, 26 de agosto, 2009 0:41:16
Asunto: [GUFA] RE: [GUFA] Pasar una tabla como parámetro a un procedimiento 
almacenado MSSQL????

Hola Alfonso
 
Solo por curiosidad,
¿ Estás intentando crear un procedimiento almacenado que sea dinamico en la 
consulta de tablas ?
Algunas experiencias he realizado sobre el tema.
 
Saludos
 
José Paez
 

________________________________

Date: Mon, 24 Aug 2009 22:01:11 +0000
From: [email protected]
Subject: [GUFA] [GUFA] Pasar una tabla como parámetro a un procedimiento 
almacenado MSSQL????
To: [email protected]
Hola gente de la lista,
Será posible pasarle a un procedimiento almacenado de MSSQL una tabla o cursor 
como parámetro????
 
Saludos,
    Alfonso
 

________________________________

 

start: 0000-00-00 end: 0000-00-00 

 



________________________________
De: Patricia Banfi <[email protected]>
Para: Alfonso Arias Lemas <[email protected]>
Enviado: viernes, 4 de septiembre, 2009 19:11:42
Asunto: [dbms] Consulta sobre Query


Hola,

 En sql 2005 necesito hacer un sp que inserte la cabecera y los items de un 
documento, y al mismo tiempo descuente la cantidad de cada item del stock.
Ningún programa debe poder consultar/actualizar el stock mientras se está 
realizando esta operación.
Se me ocurre que tengo que pasar los items en formato XML y usar with 
(tablockx) pero no tengo claro cómo sacar los datos del xml y si usar tablockx 
es correcto.
Agradecería mucho alguna sugerencia o link al respecto.
Patricia  
________________________________

Encontra las mejores recetas con Yahoo! Cocina. 
http://ar.mujer.yahoo.com/cocina/


      

Responder a