read node leer from for ejemplos desde sql sql-server xml

node - xml in sql server 2014



Cómo editar fácilmente la columna SQL XML en SQL Management Studio (9)

El estudio de administración del servidor sql no tiene esta característica.

Puedo ver a Homer Simpson como el gerente de proyectos de Microsoft golpeándose la cabeza con la palma de su mano: "¡Duh!"

Por supuesto, queremos editar columnas xml.

Tengo una tabla con una columna XML. Esta columna está almacenando algunos valores que guardo para configurar mi aplicación. Lo creé para tener un esquema más flexible. No puedo encontrar una forma de actualizar esta columna directamente desde la vista de tabla en SQL Management Studio. Otras columnas (INT o Varchar por ejemplo) son editables. Sé que puedo escribir una declaración UPDATE o crear algún código para actualizarlo. Pero estoy buscando algo más flexible que permita a los usuarios avanzados editar el XML directamente.

¿Algunas ideas?

Reiterando nuevamente: por favor no responda Puedo escribir una solicitud. Lo sé, y eso es exactamente lo que estoy tratando de evitar.


Esta es una vieja pregunta, pero necesitaba hacer esto hoy. Lo mejor que se me ocurre es escribir una consulta que genere código SQL que se puede editar en el editor de consultas; es una especie de cojera, pero te ahorra copiar y pegar cosas.

Nota: es posible que necesite ir a Herramientas> Opciones> Resultados de la consulta> Resultados a texto y establecer la cantidad máxima de caracteres mostrados en un número lo suficientemente grande como para ajustarse a sus campos XML.

p.ej

select ''update [table name] set [xml field name] = '''''' + convert(varchar(max), [xml field name]) + '''''' where [primary key name] = '' + convert(varchar(max), [primary key name]) from [table name]

que produce muchas consultas que se ven así (con algunos nombres de tabla / campo de muestra):

update thetable set thedata = ''<root><name>Bob</name></root>'' where thekey = 1

A continuación, copia estas consultas desde la ventana de resultados hasta la ventana de consulta, edita las cadenas xml y luego ejecuta las consultas.

(Editar: cambió 10 a max para evitar el error)


Estoy un poco confuso en esto, pero ¿no podrías usar el método OPENXML para fragmentar el XML en formato relacional y luego guardarlo en XML una vez que el usuario haya terminado?

Como otros han dicho, creo que sería más fácil escribir una aplicación pequeña para hacerlo.


Haciendo caso omiso de la parte "fácilmente" del título de la pregunta, aquí hay un hack gigante que es bastante decente, siempre que se ocupe de columnas XML pequeñas.

Esta es una prueba de concepto sin pensar demasiado en la optimización. Escrito contra 2008 R2.

--Drop any previously existing objects, so we can run this multiple times. IF EXISTS (SELECT * FROM sysobjects WHERE Name = ''TableToUpdate'') DROP TABLE TableToUpdate IF EXISTS (SELECT * FROM sysobjects WHERE Name = ''vw_TableToUpdate'') DROP VIEW vw_TableToUpdate --Create our table with the XML column. CREATE TABLE TableToUpdate( Id INT NOT NULL CONSTRAINT Pk_TableToUpdate PRIMARY KEY CLUSTERED IDENTITY(1,1), XmlData XML NULL ) GO --Create our view updatable view. CREATE VIEW dbo.vw_TableToUpdate AS SELECT Id, CONVERT(VARCHAR(MAX), XmlData) AS XmlText, XmlData FROM dbo.TableToUpdate GO --Create our trigger which takes the data keyed into a VARCHAR column and shims it into an XML format. CREATE TRIGGER TR_TableToView_Update ON dbo.vw_TableToUpdate INSTEAD OF UPDATE AS SET NOCOUNT ON DECLARE @Id INT, @XmlText VARCHAR(MAX) DECLARE c CURSOR LOCAL STATIC FOR SELECT Id, XmlText FROM inserted OPEN c FETCH NEXT FROM c INTO @Id, @XmlText WHILE @@FETCH_STATUS = 0 BEGIN /* Slight limitation here. We can''t really do any error handling here because errors aren''t really "allowed" in triggers. Ideally I would have liked to do a TRY/CATCH but meh. */ UPDATE TableToUpdate SET XmlData = CONVERT(XML, @XmlText) WHERE Id = @Id FETCH NEXT FROM c INTO @Id, @XmlText END CLOSE c DEALLOCATE c GO --Quick test before we go to SSMS INSERT INTO TableToUpdate(XmlData) SELECT ''<Node1/>'' UPDATE vw_TableToUpdate SET XmlText = ''<Node1a/>'' SELECT * FROM TableToUpdate

Si abre vw_TableToUpdate en SSMS, puede cambiar el "XML", que luego actualizará el valor XML "real".

De nuevo, feo truco, pero funciona para lo que necesito que haga.


La respuesta de @Jacob funciona muy bien, aunque debes agregar un REEMPLAZAR si tu XML contiene algunos caracteres:

select ''update [table name] set [xml field name] = '''''' + REPLACE(convert(varchar(max), [xml field name]), '''''''', '''''''''''') + '''''' where [primary key name] = '' + convert(varchar(max), [primary key name]) from [table name]


No creo que pueda usar la GUI de Management Studio para actualizar las columnas XML sin escribir el comando UPDATE usted mismo.

Una forma de permitir que los usuarios actualicen xml-data es escribir un programa sencillo basado en .NET (winforms o asp.net) y luego seleccionar / actualizar los datos desde allí. De esta forma, también puede desinfectar los datos y validarlos fácilmente contra cualquier esquema dado antes de insertar / actualizar la información.


Otra respuesta sin respuesta. Puedes usar LinqPad. ( https://www.linqpad.net/ ). Tiene la capacidad de editar filas SQL, incluidos los campos XML. También puede consultar las filas que desea editar a través de SQL si no está interesado en LINQ.

Mi problema particular fue intentar editar un valor XML vacío en un valor NULL. En SSMS, el valor se muestra en blanco. Sin embargo, en LinqPad se mostró nulo. Entonces, en LinqPad tuve que cambiarlo a, luego volver a cero para que se guarde el cambio. Ahora SSMS lo muestra como nulo también.


Tengo una solución económica y desagradable, pero está bien. Entonces, haz una consulta del registro, es decir

SELECT XMLData FROM [YourTable] WHERE ID = @SomeID

Haga clic en el campo de datos xml, que debe estar ''hipervinculado''. Esto abrirá el XML en una nueva ventana. Edítelo, luego copie y pegue el XML en una nueva ventana de consulta:

UPDATE [YourTable] SET XMLData = ''<row><somefield1>Somedata</somefield1> </row>'' WHERE ID = @SomeID

Pero sí, WE Desparately necesitamos poder editar. Si escuchas a Mr. Soft, mira Oracle, puedes editar XML en su equivalente de Mgt Studio. Vamos a atribuirlo a un descuido, todavía soy un ENORME fanático de SQL Server.


Terminé escribiendo una interfaz de usuario .net c # para tratar con los datos xml. El uso de xsl para mostrar y un esquema xml ayudó a mostrar el XML de forma agradable y mantener su integridad.

editar: También c # contiene la clase xmldocument que simplifica la lectura / escritura de los datos.