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参数的值,第二查询中使用参数

第三个选项是使用存储过程和所有内部逻辑

相关问题