2011-05-24 122 views
2

我有一個使用XML數據類型的查詢。 (你可以看到查詢hereSSRS 2008是否支持SQL查詢中的XML數據類型?

只是要清楚這意味着我的查詢中有這樣的事情:

declare @xmlDoc XML 

當我嘗試粘貼我的查詢中的數據集的SQL在BIDS Server報表服務報告(Visual Studio 2008中),彈出一個對話框,詢問我定義我的參數:

Define Query Parameters

的問題是,我沒有任何參數!我在查詢中定義和使用@xmldoc(它在SSMS中沒有問題運行)。

這似乎並不關乎我在這裏輸入的內容。這永遠是下一個對話框:

Error Message

「確定」關閉數據集屬性和我沒有得到任何字段設置爲我。 「取消」讓我回到屬性再次嘗試。如果我把一個查詢沒有XML數據類型,那麼它工作正常。

我很難過...我只能得出結論,SSRS不支持XML數據類型。

這是真的嗎?有沒有解決辦法?

回答

1

您應該刪除變量@xmldoc和INSERT這樣的查詢使用

CAST(@DocParam as XML)

; 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)') 

第二個選項是有2個數據集,第一臺@xmldoc參數的值,第二查詢中使用參數

第三個選項是使用存儲過程和所有內部邏輯

相關問題