1

Ich möchte eigentlich die folgende BeschreibungWie kann ich eine Mehrfachsuche von SPROC/UDF durchführen, indem ich einen tabled-value an ihn übergebe?

Dies ist die Tabelle Argument, das ich auf den Server

<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. 

Bin ich klar genug passieren erreichen wollen?

Ich habe nichts dagegen, es anders als xml zu tun. Was ich brauche, ist die Auswahl von Werten, die ein Array von zwei Werten der Spalten bilden.

+0

Was ist der Datentyp von Items.Item - XML ​​oder Text? –

+0

Spalte1 varchar (32), Spalte2 int. – Shimmy

+0

zeig uns deinen Versuch .... –

Antwort

2

Sie sollten in der Lage sein, das XML so zu parsen und es wie eine Tabelle zu verbinden.

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 Wenn Sie dies aus dem Speicher getan haben, könnte es sein, dass einige Syntax ausgeschaltet wurde, besonders bei text().

Verwandte Themen