Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

problema con OpenXml

Estas en el tema de problema con OpenXml en el foro de SQL Server en Foros del Web. Hola a todos, alguien sabe el porque no me actualiza las filas de la tabla. No me hace ningun cambio, esta bien el procedimiento almacenado.. ...
  #1 (permalink)  
Antiguo 30/09/2011, 06:02
 
Fecha de Ingreso: mayo-2008
Mensajes: 23
Antigüedad: 15 años, 11 meses
Puntos: 0
problema con OpenXml

Hola a todos, alguien sabe el porque no me actualiza las filas de la tabla.
No me hace ningun cambio, esta bien el procedimiento almacenado..
Muchas gracias..

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE sp_UpdateTABLA
@empdata nText,
@campo1 int,
@campo2 int,
@campo1_cli int,
@campo2_cli int,
@idusuario Bigint

AS
BEGIN
DECLARE @hDoc int
exec sp_xml_preparedocument @hDoc OUTPUT,@empdata


UPDATE TRABLAFISICA
SET
TRABLAFISICA.OFFEFI= XMLTRABLAFISICA.OFFEFI, TRABLAFISICA.OFESTA= XMLTRABLAFISICA.OFESTA , TRABLAFISICA.OFCODI= XMLTRABLAFISICA.OFCODI,
TRABLAFISICA.OFFEC= XMLTRABLAFISICA.OFFEC, TRABLAFISICA.OFFEC2= XMLTRABLAFISICA.OFFEC2, TRABLAFISICA.OFTIES= XMLTRABLAFISICA.OFTIES
FROM OPENXML(@hDoc, 'NewDataSet/TRABLAFISICA')
WITH ([IDUSUARIO] [numeric](12, 0), [OFCARO] [int] ,[OFCODG] [numeric](9, 0),[OFCARP] [int] ,
[OFSUBC] [int], [OFHOTE] [int], [OFCONT] [varchar](2), [OFFEIN] [numeric](7, 0) ,
[OFAGEN] [int], [OFSUCU] [int], [OFAGCL] [int], [OFSUCL] [int] ,[OFFEFI] [numeric](7, 0),
[OFESTA] [varchar](1), [OFCODI] [int], [OFFEC] [numeric](7, 0),[OFFEC2] [numeric](7, 0),
[OFVERS] [int], [OFTIES] [varchar](1), [ESTADMOD] [varchar](1),[FECHAMOD] [varchar](26),
[ESTADENV] [varchar](1)) XMLTRABLAFISICA
WHERE
TRABLAFISICA.OFCARO = XMLTRABLAFISICA.OFCARO AND TRABLAFISICA.OFCODG = XMLTRABLAFISICA.OFCODG AND TRABLAFISICA.OFCARP = XMLTRABLAFISICA.OFCARP
AND TRABLAFISICA.OFSUBC = XMLTRABLAFISICA.OFSUBC AND TRABLAFISICA.OFHOTE =XMLTRABLAFISICA.OFHOTE AND TRABLAFISICA.OFCONT = XMLTRABLAFISICA.OFCONT
AND TRABLAFISICA.OFVERS = XMLTRABLAFISICA.OFVERS AND TRABLAFISICA.OFFEIN = XMLTRABLAFISICA.OFFEIN
AND TRABLAFISICA.OFAGEN = @campo1 And TRABLAFISICA.OFSUCU = @campo2
AND TRABLAFISICA.OFAGCL = @campo1_cli And TRABLAFISICA.OFSUCL = @campo2_Cli
AND XMLTRABLAFISICA.ESTADMOD = 'M' AND (TRABLAFISICA.ESTADMOD = 'A' OR TRABLAFISICA.ESTADMOD = '') AND TRABLAFISICA.ESTADENV = 'P'


EXEC sp_xml_removedocument @hDoc
END
GO
  #2 (permalink)  
Antiguo 30/09/2011, 07:49
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: problema con OpenXml

que error te manda?? Los campos en el where existen en el update??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 30/09/2011, 13:34
 
Fecha de Ingreso: mayo-2008
Mensajes: 23
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: problema con OpenXml

No me salta ningun error, simplemente cuando llamo al procedimiento almacenado no actualiza los registros. Mira esto es lo que hago para enviar el xml al procedimiento:

Dim tbl As DataTable = objDS.Tables("TABLA")
Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder(15000)
Dim sw As System.IO.StringWriter = New System.IO.StringWriter(sb)

Dim col As DataColumn
For Each col In tbl.Columns
col.ColumnMapping = System.Data.MappingType.Attribute
Next

objDS.WriteXml(sw, System.Data.XmlWriteMode.WriteSchema)

Dim com As New SqlCommand("dbo.sp_UpdateTabla")
com.Connection = Conecta_Sql()
com.CommandType = CommandType.StoredProcedure
com.Parameters.Add("@empdata", SqlDbType.NText).Value = sb.ToString()
com.Parameters.Add("@campo1", SqlDbType.Int).Value = Campo1
com.Parameters.Add("@campo2", SqlDbType.Int).Value = campo2
com.Parameters.Add("@campo1_cli", SqlDbType.Int).Value = campo1_cli
com.Parameters.Add("@campo2_cli", SqlDbType.Int).Value = campo2_Cli
com.Parameters.Add("@IdUsuario", SqlDbType.BigInt).Value = idusuario

com.CommandTimeout = 120

com.ExecuteNonQuery()
El ejemplo lo he cogido de aqui: http://support.microsoft.com/kb/316244/es
Este mismo ejemplo tal como esta, funciona perfectamente, yo lo he adaptado a mi código, pero no encuentro el porque no me actualiza los registros..
Ves algo raro, yo la verdad que no, es por lo que pido ayuda..
Muchas gracias, por vuestro tiempo.
  #4 (permalink)  
Antiguo 30/09/2011, 13:38
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: problema con OpenXml

que es lo que quieres hacer, para que utilizas el openxml?? tienes algun ejemplo de los datos que quieres actualizar???

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 02/10/2011, 13:51
 
Fecha de Ingreso: mayo-2008
Mensajes: 23
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: problema con OpenXml

Hola libras, lo que pretendo es actualizar 20000 filas de una tabla que se encuentra en DB2, a SQL server, ahora mismo lo estoy haciendo a lo bestia y me tarda muchisimo tiempo, o sea hago la consulta y recorro fila a fila y actualizo, y buscando por internet vi el ejemplo que te pase del enlace :http://support.microsoft.com/kb/316244/es y me resulto algo interesante. Por que con OpenXml lo que se hace es introducir el resultado de una consulta Sql en un Xml el cual luego puedes realizar la actualización en sql y me imagino que valdría, si hay otra forma más facil no la sé.
Te voy a poner un ejemplo ya que la consulta que tengo es bastante larga y aqui no sé si voy a tener bastante espacio en caracteres:
Select campo1,campo2,campo3, ... from TABLADB2 where...
lo que devuelve esta consulta se traslada a Xml y acontinuación llamo al procedimiento almacenado, y yo creo que el procedimiento almacenado no hace nada, tu ves algún error??? es que no te puedo decir que errores me sale puesto que no sale ninguno, solo que no actualiza las filas que debe.
Saludos y gracias de nuevo.
  #6 (permalink)  
Antiguo 03/10/2011, 07:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: problema con OpenXml

En el link que mencionas si viste que dice que las actualizaciones o inserciones se realizan por medio de VB. net???

Este artículo paso a paso describe cómo realizar inserciones masivas y las actualizaciones con diferentes proveedores de datos de Microsoft .NET con el método OpenXML en Microsoft Visual Basic. NET.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 03/10/2011, 23:51
 
Fecha de Ingreso: mayo-2008
Mensajes: 23
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: problema con OpenXml

Si, por hay las hago por VB.net.
Es que desde VB.net se llama al procedimiento almacenado que actualiza la tabla en Sql server.
Saludos.

Etiquetas: fecha, procedimiento, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:35.