Yo he utilizado la siguiente función que te coloco a continuación, estuve buscando utilizar las funciones de XML que provee SQL Server, pero me estaba dando problemas, por lo que al final, el procedimiento hace un simple REPLACE.
/*
Nombre: gen.set_pb_field_data
Descripción: Función para actualizar el valor de un campo en los campos adicionales de las entidades (property_bag_data)
Ejemplo: Si se desea actualiar el campo "esSuspendido", con el valor de 0 para los empleados se haría
de la siguiente forma:
UPDATE exp.emp_empleos
SET emp_property_bag_data = gen.set_pb_field_data(emp_property_bag_data, 'Empleos', 'esSuspendido', 0)
*/
CREATE FUNCTION gen.set_pb_field_data (
@xml XML,
@entidad VARCHAR(50),
@campo VARCHAR(50),
@valor VARCHAR(50)
)
RETURNS XML
AS
BEGIN
DECLARE @valorAnterior VARCHAR(50),
@texto VARCHAR(4000),
@campoXmlAnterior VARCHAR(100),
@campoXmlNuevo VARCHAR(100),
@estructuraXml VARCHAR(100),
@indice INT
SET @texto = CONVERT(VARCHAR(4000), @xml)
SET @valorAnterior = gen.get_pb_field_data(@xml, @campo)
SET @campoXmlAnterior = '<' + @campo + '>' + ISNULL(@valorAnterior, '') + '</' + @campo + '>'
SET @campoXmlNuevo = '<' + @campo + '>' + ISNULL(@valor, '') + '</' + @campo + '>'
--Si existe el valor, solo se arma el elemento xml y se reemplaza
IF @valorAnterior IS NOT NULL
BEGIN
SET @texto = REPLACE(@texto, @campoXmlAnterior, @campoXmlNuevo)
END
-- Si no existe el valor, se agrega al final del xml, el elemento xml con el nuevo valor
ELSE
BEGIN
SET @indice = CHARINDEX('</' + @entidad + '>', @texto)
-- Si el índice es mayor a cero significa que ya esta creada la estructura básica del xml, por lo que solo se agrega
-- sino se debe crear la estructura báscia del xml con el campo nuevo
IF @indice > 0
SET @texto = SUBSTRING(@texto, 1, @indice - 1) + @campoXmlNuevo + SUBSTRING(@texto, @indice, LEN(@texto) - @indice + 1)
ELSE
SET @texto = '<DocumentElement><' + @entidad + '>' + @campoXmlNuevo + '</' + @entidad + '></DocumentElement>'
END
SET @xml = CONVERT(XML, @texto)
RETURN @xml
END
Si necesitas más detalle del funcionamiento de la función me decís
answered
23 May '13, 16:35
Carlos Soria ♦♦
1.2k●129●141●148
accept rate:
60%
Como insertar etiquetas adicionales? Te referís a modificar el XML de un registro? Siempre tendrías que respetar lo que se ha configurado en la aplicación para que Evolution lo entienda... ¿Estoy en lo correcto?
Danny, marca la respuesta correcta porfa!