2009-09-08 4 views
1

J'ai besoin de créer une instruction SQL dynamique qui sélectionne les champs en fonction d'un paramètre XML. Dites que j'ai un proc stocké avec 1 param - [@FIELDS XML] qui contient des noms de champs. par exemple ...Comment créer une instruction SQL dynamique basée sur un seul paramètre XML

Champ 1 = Nom

champ 2 = Adresse etc ...

..dans réalité il y aurait jusqu'à 50 champs et je veux seulement faire rapport sur ceux de la Paramètre XML

comment puis-je faire une déclaration simple comme ce travail ..

select 
    xmlParam1, 
    xmlParam2, 
    ... 
    xmlParamN 
from TABLE 

etc ...

NB: les données proviennent d'un tableau de chaînes en C#.

Merci!

Répondre

0

boucle simplement à travers le réseau pour créer la requête SQL appropriée en tant que chaîne, EXEC il, par exemple:

DECLARE @SQL NVARCHAR(4000) 

SET @SQL='select xmlParam1, xmlParam2... from Table' 

EXEC(@SQL) 

De toute évidence, la partie SET @SQL serait où vous boucle à travers le réseau, la construction de la chaîne .

EDIT

Pour boucler le fichier XML, vous devez d'abord SELECT un recordset de celui-ci, comme

DECLARE @productIds xml 
SET @productIds ='<Products><id>3</id><id>6</id><id>15</id></Products>' 

SELECT ParamValues.ID.value('.','VARCHAR(20)') 
    FROM @productIds.nodes('/Products/id') as ParamValues(ID) 

Vous devez ensuite itérer le recordset, la construction de votre chaîne. Il existe plusieurs façons de le faire, telles que l'utilisation de tables temporaires ou de curseurs. Quelques exemples peuvent être trouvés here.

+0

Salut darasd, pouvez-vous me donner un exemple de comment passer en boucle s'il vous plaît? – Grant

Questions connexes