2

J'ai une requête qui utilise le type de données XML. (Vous pouvez voir la requête here.)SSRS 2008 prend-il en charge le type de données XML dans les requêtes SQL?

Pour être clair, cela signifie que ma requête a quelque chose comme ça en elle:

declare @xmlDoc XML 

Lorsque je tente de coller ma requête en tant Dataset pour un SQL Rapport Server Reporting services dans BIDS (Visual studio 2008) un POPs dialogue me demandant de définir mes paramètres:

Define Query Parameters

Le problème est que je n'ai pas de paramètres! Je définis et utilise @xmldoc dans la requête (il fonctionne sans problèmes dans SSMS).

Cela ne semble pas vraiment important ce que je saisis ici. Ceci est toujours la boîte de dialogue suivante:

Error Message

« OK » ferme les propriétés DataSet et je reçois pas les champs configuration pour moi. "Annuler" me ramène aux propriétés pour essayer à nouveau. Si je mets dans une requête sans le type de données XML alors cela fonctionne très bien.

Je suis perplexe ... Je ne peux que conclure que SSRS ne supporte pas le type de données XML.

Est-ce vrai? Y at-il un travail autour?

Répondre

1

Vous devez supprimer @xmldoc variable et utiliser

CAST(@DocParam as XML)

dans INSERT requête comme ceci:

; With c as(SELECT CAST(@DocParam as XML) DocParam) 
SELECT TBL.SParam.value('local-name(.)[1]', 'varchar(50)') as Name, 
     TBL.SParam.value('(.)[1]', 'varchar(50)') as Value1, 
     TBL2.SParam2.value('(.)[1]', 'varchar(50)') as Value2, 
     TBL3.SParam3.value('(.)[1]', 'varchar(50)') as Value3, 
     TBL4.SParam4.value('(.)[1]', 'varchar(50)') as Value4, 
     TBL5.SParam5.value('(.)[1]', 'varchar(50)') as Value5 
FROM C 
CROSS APPLY 
DocParam.nodes('/NewDataSet/Table1[1]/*') AS TBL(SParam) 
     left JOIN DocParam.nodes('/NewDataSet/Table1[2]/*') AS TBL2(SParam2) 
      ON TBL.SParam.value('local-name(.)[1]', 'varchar(50)') 
       = TBL2.SParam2.value('local-name(.)[1]', 'varchar(50)') 
     left JOIN DocParam.nodes('/NewDataSet/Table1[3]/*') AS TBL3(SParam3) 
      ON TBL.SParam.value('local-name(.)[1]', 'varchar(50)') 
       = TBL2.SParam2.value('local-name(.)[1]', 'varchar(50)') 
     left JOIN DocParam.nodes('/NewDataSet/Table1[4]/*') AS TBL4(SParam4) 
      ON TBL.SParam.value('local-name(.)[1]', 'varchar(50)') 
       = TBL2.SParam2.value('local-name(.)[1]', 'varchar(50)') 
     left JOIN DocParam.nodes('/NewDataSet/Table1[5]/*') AS TBL5(SParam5) 
      ON TBL.SParam.value('local-name(.)[1]', 'varchar(50)') 
       = TBL2.SParam2.value('local-name(.)[1]', 'varchar(50)') 

Deuxième option est d'avoir 2 datasets, premiers ensembles valeur de paramètre @xmldoc et deuxième utiliser le paramètre dans la requête

Une troisième option consiste à utiliser une procédure stockée avec toute cette logique

Questions connexes