1

Je veux réellement obtenir la description suivanteComment faire un multi-recherche SPROC/UDF en lui passant une valeur-tabled?

Tel est l'argument de la table que je veux transmettre au serveur

<items> 
    <item category="cats">1</item> 
    <item category="dogs">2</item> 
</items>  

SELECT * FROM Item 
    WHERE Item.Category = <one of the items in the XML list> 
    AND Item.ReferenceId = <the corresponding value of that item xml element> 

--Or in other words: 
SELECT FROM Items 
    WHERE Item IN XML according to the splecified columns. 

Suis-je clair enought?

Cela ne me dérange pas de le faire d'une manière différente de xml. Ce dont j'ai besoin, c'est de sélectionner des valeurs qui exploitent un tableau de deux de ses valeurs de colonnes.

+0

Quel est le type de données de Items.Item - XML ​​ou texte? –

+0

col1 varchar (32), col2 int. – Shimmy

+0

montrez-nous votre tentative .... –

Répondre

2

Vous devriez être capable d'analyser le XML ainsi, et le rejoindre comme une table.

DECLARE @foo XML; 

SET @foo = N'<items> 
    <item category="cats">1</item> 
    <item category="dogs">2</item> 
</items>'; 

WITH xml2Table AS 
(
SELECT 
    x.item.value('@category', 'varchar(100)') AS category, 
    x.item.value('(.)[1]', 'int') AS ReferenceId 
FROM 
    @foo.nodes('//items/item') x(item) 
) 
SELECT 
    * 
FROM 
    Item i 
    JOIN 
    xml2Table_xml x ON i.category = x.Category AND i.ReferenceId = x.ReferenceId 
0
DECLARE @x XML; 
SELECt @x = N'<items> 
    <item category="cats">1</item> 
    <item category="dogs">2</item> 
</items>'; 

WITH shred_xml AS (
    SELECT x.value('@category', 'varchar(100)') AS category, 
    x.value('text()', 'int') AS ReferenceId 
    FROM @x.nodes('//items/item') t(x)) 
SELECT * 
    FROM Item i 
    JOIN shred_xml s ON i.category = s.category 
    AND i.ReferenceId = s.ReferenceId; 

BTW En procédant de la mémoire, la syntaxe a peut-être été désactivée, en particulier dans text().

Questions connexes