Suponiendo que tengo una tabla de SQL Server 2005 con una columna XML que contiene los siguientes valores:SQL existe() consulta
CREATE TABLE XmlTest (
XMLid int,
Data xml)
INSERT XMLTest
VALUES (1 , '<data><item><type v="1" /><value v="12.56" /></item><item><type v="3" /><value v="DEBIT" /></item></data>')
INSERT XMLTest
VALUES (2 , '<data><item><type v="1" /><value v="99.22" /></item><item><type v="3" /><value v="CREDIT" /></item></data>')
INSERT XMLTest
VALUES (3 , '<data><item><type v="3" /><value v="12.56" /></item><item><type v="1" /><value v="DEBIT" /></item></data>')
que quiero probar la existencia de elementos item con un tipo v = "3" Y un valor v = "DEBITO".
estoy usando la función existe() de la siguiente manera:
SELECT *
FROM XmlTest
WHERE Data.exist('/data/item/type[@v=''3'']') = 1
AND Data.exist('/data/item/value[@v=''DEBIT'']') = 1
Sin embargo esto me lleva de nuevo filas con XMLid 1 y 3.
¿Alguien puede esbozar lo que el cambio Necesito hacer a mi DONDE cláusula para devolver solo el registro que tiene un ítem donde el valor del nodo de tipo v es 3 y el valor del valor del nodo v es "DEBIT"? es decir, solamente grabar con XMLid 1
Gracias
+1 MALDITO! Acabo de presentar esta solución después de un poco de investigación ... solo para descubrir que has sido 6 minutos más rápido ... ¡ARGH! :-) Buena llamada, sin embargo! –
Perfecto. Gracias Matt & Marc_s por su ayuda. – doshea