2016-04-20 1 views
0

ich eine gespeicherte Prozedur in SQL Server, die mit einem Parameter arbeitet, die eine Liste von 2 Schlüsseln sein müssen, wie:Liste als Parameter in SQL-

 
key1 key2 
1  7 
2  8 
3  9 
1  5 
3  8 

ich nicht einen Tabellenwertparametertyp verwenden kann. Wie kann ich einen Parametertyp definieren, der sich um diese Situation kümmert?

Obs .: Ich habe bereits versucht, einen varchar (max) als Parametertyp für jeden Feldschlüssel zu verwenden, Kommas zu trennen Werte und XML-Parsing in SQL, aber dies bedeutet in 2 Tabellen mit je 1 Spalte und könnte finde keinen Weg, diese Spalten einfach in 1 Tabelle nebeneinander zu stellen.

+2

'Ich kann nicht einen Tabellenwertparameter type.' verwenden abrufen - warum? – Igor

+0

Ich verwende Entity Framework, um die Prozedur zu importieren, und TVP wird nicht unterstützt. – rafaelrcdev

+0

Worauf laufen Sie, als Sie es versucht haben? Ich habe es gegoogelt und einen Link gefunden, der so aussieht, als wäre das mit einem SP und TVP zu verkraften. https://code.msdn.microsoft.com/Stored-Procedure-with-6c194514 – Igor

Antwort

0

Sie können dies mit XML-Typ tun, wenn Sie wissen, wie Sie Ihre XML bilden, und die Daten

DECLARE @xml XML 
SET @xml = '<root> 
       <key> 
        <key1>1</key1> 
        <key2>7</key2> 
       </key> 
       <key> 
        <key1>2</key1> 
        <key2>8</key2> 
       </key> 
       <key> 
        <key1>3</key1> 
        <key2>9</key2> 
       </key> 
       <key> 
        <key1>1</key1> 
        <key2>5</key2> 
       </key> 
       <key> 
        <key1>3</key1> 
        <key2>8</key2> 
       </key> 
      </root>' 

SELECT p.value('(./key1)[1]', 'int') AS key1, 
     p.value('(./key2)[1]', 'int') AS key2 
FROM @XML.nodes('/root/key') T(p) 


key1  key2 
----------- ----------- 
1   7 
2   8 
3   9 
1   5 
3   8 
+0

Das hat mir sehr geholfen. Ich liefere das XML nicht auf der Anwendungsseite, aber mit einem einzigen Parameter konnte ich ein korrektes XML generieren und das Ergebnis erwartet bekommen. Vielen Dank. – rafaelrcdev