update type the tag must modify method literal into insertar data column campo argument actualizar xml sql-server-2005 tsql dml xml-dml

type - xml value sql server



TSQL 2005, XML DML-¿Actualizar dos valores a la vez? (3)

No, como se indica en la documentación, el replace value of solo puede operar en un solo nodo a la vez. Hasta donde yo sé, no hay una solución para esto. Tendrá que usar 2 instrucciones de actualización.

¿Hay alguna manera de combinar estos dos valores de reemplazo con 1 declaración de actualización?

UPDATE dbo.MyTable SET MyXmlColumn.modify(''replace value of (/node/@att1)[1] with "1"'') WHERE id = 1 UPDATE dbo.MyTable SET MyXmlColumn.modify(''replace value of (/node/@att2)[1] with "2"'') WHERE id = 1

http://msdn.microsoft.com/en-US/library/ms190675(v=SQL.90).aspx


Si solo quiere cambiar un par de valores, podría usar este enfoque que encontré en sqlservercentral . Utiliza una instrucción select para obtener los datos que la manipulan varias veces y usa una sola declaración de actualización para cambiar los datos de la tabla.

No es perfecto, pero podría ser lo suficientemente bueno en algunos casos de uso. Básicamente es una versión simplificada de la solución de bucle para que cambie un número fijo de valores.

DECLARE @temp XML SET @temp = (SELECT Column_name FROM Table_name WHERE AuthId = @AuthId) SET @temp.modify(''replace value of (/UmAuthDto/Assignment/QueueId/text())[1] with sql:variable("@NewValue")'') SET @temp.modify(''replace value of (/UmAuthDto/Assignment/QueueName/text())[1] with sql:variable("@NewValue")'') UPDATE Table_name SET Column_name = @temp WHERE AuthId = @AuthId


No creo que tengas suerte, Thx.

Probé varias variantes sintácticas sin alegría. Por ejemplo, lo obvio:

SET MyXmlColumn.modify(''...''), MyXmlColumn.modify(''...'')

rendimientos:

El nombre de la columna ''MyXmlColumn'' se especifica más de una vez en la cláusula SET. A una columna no se le puede asignar más de un valor en la misma cláusula SET. Modifique la cláusula SET para asegurarse de que una columna se actualice solo una vez. Si la cláusula SET actualiza las columnas de una vista, el nombre de la columna ''MyXmlColumn'' puede aparecer dos veces en la definición de la vista.

Pero no hay nada útil para este mensaje de error en el espacio XML DML.

La conclusión es que Expression1 y Expression2 deben ser elementos individuales.

Incluso las discusiones más completas terminan recorriéndolo ...

http://blogs.msdn.com/b/denisruc/archive/2005/09/19/471562.aspx

Lo siento. :(

PD: Si puedes soportar el hackiness, lanzar a VARCHAR (MAX) y hacer un reemplazo normal () debería hacer el truco. Ver: ¿Puedo hacer una búsqueda / reemplazo en t-sql?