Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用不返回数据集的XMLNAMESPACES的SSRS查询_Xml_Tsql_Ssrs 2008_Xml Namespaces_Reportingservices 2005 - Fatal编程技术网

使用不返回数据集的XMLNAMESPACES的SSRS查询

使用不返回数据集的XMLNAMESPACES的SSRS查询,xml,tsql,ssrs-2008,xml-namespaces,reportingservices-2005,Xml,Tsql,Ssrs 2008,Xml Namespaces,Reportingservices 2005,我为SSRS报告编写的sql查询在SSMS中执行得非常完美,但在SSRS报告中运行时无法返回结果。报表服务器或数据库服务器上没有错误。SSRS报告呈现但不包含任何数据。 我尝试运行SQL profiler,但查询根本没有显示。我在服务器上有几个其他报告可以正确运行,并且查询显示在SQL profiler中。 在破损的报告中唯一不同的是,我使用查询XML数据;使用XMLNAMESPACES(默认的“urn:hl7 org:v3”) 我在运行SQLServer2005和2008时得到了相同的结果 这

我为SSRS报告编写的sql查询在SSMS中执行得非常完美,但在SSRS报告中运行时无法返回结果。报表服务器或数据库服务器上没有错误。SSRS报告呈现但不包含任何数据。 我尝试运行SQL profiler,但查询根本没有显示。我在服务器上有几个其他报告可以正确运行,并且查询显示在SQL profiler中。 在破损的报告中唯一不同的是,我使用
查询XML数据;使用XMLNAMESPACES(默认的“urn:hl7 org:v3”)

我在运行SQLServer2005和2008时得到了相同的结果

这是一个问题,关于为什么在SSRS中运行时不返回任何内容的任何想法。我已修改查询以删除/修改客户端信息,这可能会导致语法错误,但未修改的查询在SSMS中运行并返回结果

Declare @MinDate datetime;
Declare @MaxDate datetime;
DECLARE @fooData TABLE (msgId varchar(100), TransactionName     varchar(30),SourceSystem varchar(12),MsgDay date) 

;WITH XMLNAMESPACES(DEFAULT 'urn:hl7-org:v3')

INSERT INTO @fooData
SELECT 
       MsgLogID as msgId
      ,TransactionName =
            CASE LEFT(MsgBody,28)
                    --WHEN '<qqqResult' THEN 'qqqResult'
                    WHEN '<qqqResult xmlns=' THEN 'qqqResult'
                    ELSE 'qqqqRevised'
                    END
    , SourceSystem =
            CASE LEFT(MsgBody,21)
                    --WHEN '<qqqResult' THEN CONVERT(XML,[MsgBody]).value('(/qqqResult/receiver/device/id/@extension)[1]','varchar(1000)')
                    WHEN '<qqqResult' THEN CONVERT(XML,[MsgBody]).value('(/qqqResult/sender/device/id/@extension)[1]','varchar(1000)')
                    ELSE CONVERT(XML,[MsgBody]).value('(/qqqRevised/sender/device/id/@extension)[1]','varchar(1000)')
                    END
     , Convert(date,[MsgDateTime]) as MsgDay

  FROM [foo].[dbo].[fooMegerPerson_WCF]


  WHERE [TransactionStatus] = 'Valid'

SELECT @MaxDate=DATEADD(DAY,0,datediff(day,0, MAX([MsgDateTime]))) ,@MinDate=DATEADD(DAY,0,datediff(day,0, MIN ([MsgDateTime])) )FROM [foo].[dbo].[fooMegerPerson_WCF]

-- Declare a temp table for the query msg type so that we can create a join
DECLARE @msgNameTable TABLE (msgName varchar(30))
INSERT INTO @msgNameTable (msgName)
Values ('qqqResult'),('fooRevised')

DECLARE @sourceTable TABLE (sourceName varchar(10))
INSERT INTO @sourceTable (sourceName)
Values ('foo_1'),('foo_2') 
--Select * from @msgNameTable
-- create a date table containing every day between start and end
DECLARE @datetable TABLE (d date) 
INSERT INTO @datetable
SELECT     TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) Date = DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY a.object_id) - 1, 
@MinDate)
FROM         sys.all_objects a CROSS JOIN
                      sys.all_objects b

-- cross join to create a daily entry for every msg type and every source system                      
DECLARE @dateNameSourceTable  TABLE (d date, msgName varchar (30),sourceName varchar(10)) 
INSERT INTO @dateNameSourceTable                     
                    Select dt.d, mn.msgName, st.sourceName from @datetable dt CROSS JOIN @msgNameTable mn CROSS JOIN @sourceTable st
--SELECT * FROM @dateNameSourceTable



Select Count(x.msgId) AS MessageCount,dsn.msgName AS TransactionName ,dsn.d, dsn.sourceName 
FROM @fooData   as X
  RIGHT JOIN @dateNameSourceTable dsn ON x.MsgDay = dsn.d  AND x.SourceSystem = dsn.sourceName  AND x.TransactionName = dsn.msgName
   Group By dsn.d, dsn.msgName, dsn.sourceName
  Order By dsn.d, dsn.sourceName , dsn.msgName
Declare@mindatetime;
声明@MaxDate-datetime;
声明@fooData表(msgId varchar(100)、TransactionName varchar(30)、SourceSystem varchar(12)、MsgDay日期)
;使用XMLNAMESPACES(默认为“urn:hl7 org:v3”)
插入@fooData
挑选
MsgLogID作为msgId
,TransactionName=
案例左侧(MsgBody,28)
--什么时候
这篇破碎的报告唯一不同的是我
使用XML查询XML数据;使用XMLNAMESPACES(默认为“urn:hl7 org:v3”)

这是唯一一件非常重要的事

返回“NULL”


嗨,这个问题解决了吗?你需要进一步的帮助吗?谢谢你的提示。最后,我使用名称空间通配符从头开始重新构建了报表,它可以正常工作
DECLARE @XML XML=
'<root><a>test</a></root>';

SELECT @XML.value('(/root/a)[1]','nvarchar(max)')
WITH XMLNAMESPACES(DEFAULT 'tmpUri')
SELECT @XML.value('(/root/a)[1]','nvarchar(max)')
DECLARE @XML XML=
'<root xmlns="tmpUri"><a>test</a></root>';

WITH XMLNAMESPACES(DEFAULT 'tmpUri')
SELECT @XML.value('(/root/a)[1]','nvarchar(max)')
SELECT @XML.value('(/*:root/*:a)[1]','nvarchar(max)')