Fondamentalmente ho una colonna xml e devo trovare e sostituire un valore di tag in ogni record.Posso eseguire una ricerca/sostituzione in t-sql?
risposta
Per qualcosa di reale, mi piacerebbe andare con XPaths, ma a volte basta una soluzione rapida e sporca:
È possibile utilizzare CAST per trasformare quella colonna XML in un varchar regolare, e poi fare la tua sostituzione normale.
UPDATE xmlTable SET xmlCol = REPLACE(CAST(xmlCol as varchar(max)), '[search]', '[replace]')
Quella stessa tecnica rende anche la ricerca XML un gioco da ragazzi, quando è necessario eseguire solo una query rapido per trovare qualcosa, e non si vuole affrontare XPaths.
SELECT * FROM xmlTable WHERE CAST(xmlCol as varchar(max)) LIKE '%found it!%'
Edit: Giusto desidera aggiornare questo un po ', se si ottiene un messaggio lungo le linee di Conversione di uno o più caratteri da XML a bersaglio collazione impossibile, solo allora è necessario utilizzare nvarchar che supporta l'unicode.
CAST(xmlCol as nvarchar(max))
Per trovare un contenuto in una colonna XML, esaminare il metodo exist(), come descritto in MSDN here.
SELECT * FROM Table
WHERE XMLColumn.exist('/Root/MyElement') = 1
... per sostituire, utilizzare il metodo di modifica(), come descritto here.
SET XMLColumn.modify('
replace value of (/Root/MyElement/text())[1]
with "new value"
')
..Tutto assumendo SqlServer 2005 o 2008. Questo si basa su XPath, che avrete bisogno di sapere.
update my_table
set xml_column = replace(xml_column, "old value", "new value")
"tipo di dati XML è argomento valido per l'argomento 1 di sostituire fuction" –
- 1. TSQL - come eseguire una query come variabile?
- 2. tsql: è possibile eseguire istruzioni caso nidificate in una selezione?
- 3. Come posso ottimizzare/rifattorizzare una clausola "LIKE" di TSQL?
- 4. Sostituire una nuova riga in TSQL
- 5. TSQL: aggiorna una colonna in null
- 6. È possibile definire una funzione locale in una query TSQL?
- 7. Transazioni nidificate in TSQL
- 8. millisecondo in SQL tsql
- 9. tSQL NOT IN Query
- 10. TSQL make grilletto fallire in silenzio
- 11. SQL SMO per eseguire lo script TSQL batch
- 12. TSQL Scrittura in una tabella temporanea da SQL dinamico
- 13. Come chiamo una funzione TSQL da ado.net
- 14. TSQL: somma una query di unione
- 15. Funzione all'interno di una funzione TSQL
- 16. Disabilita controllo script TSQL?
- 17. Seleziona da unione tsql
- 18. TSQL, contando coppie di valori in una tabella
- 19. TSQL Come si stampa PRINT in una funzione definita dall'utente?
- 20. TSQL SELEZIONA quindi UPDATE in una transazione, quindi restituisce SELECT
- 21. Come creare viste aggiornabili in TSQL
- 22. transazione TSQL verificando tanto @@ ERROR e @@ ROWCOUNT dopo una dichiarazione
- 23. Costanti e Includi file in TSQL
- 24. TSQL: try-catch transazione in trigger
- 25. Posso eseguire LocalDb "in memoria"
- 26. TSQL Try/Catch in Transaction o viceversa?
- 27. Posso eseguire una ricerca sul server di posta in Java?
- 28. Come posso far eseguire una funzione ogni secondo in swift?
- 29. Come posso eseguire una query SQL "NOT IN" più veloce?
- 30. Come posso eseguire una sostituzione condizionale in Perl?
hah, che è un piccolo hack geniale :-) –
@ Cory-Mawhorter Lei ha parlato di XPath sarebbe "migliore". Come useresti XPath per cambiare qualcosa nella colonna XML? –
@ArminderDahul È passato un po 'di tempo ma penso che si possa fare come 'set xmlCol.nodes ('/somenode/someothernode [@ id = sql: variable (" @ somevar ")]/text ') =' blah'' . Non sono sicuro. La risposta di Michael potrebbe farti iniziare. –