Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
TSQL&;SSRS-返回两个不同数据集的同一查询_Sql_Visual Studio 2010_Reporting Services_Ssms - Fatal编程技术网

TSQL&;SSRS-返回两个不同数据集的同一查询

TSQL&;SSRS-返回两个不同数据集的同一查询,sql,visual-studio-2010,reporting-services,ssms,Sql,Visual Studio 2010,Reporting Services,Ssms,这解释起来有点尴尬,所以我会尽力的 我在SSMS 17中编写了一个查询。查询运行良好,并正确返回1990-01-01至2018-03-04的数据。这是正确的,2018-03-04是该查询的最新案例 当将这个精确的查询放到SSRS(VisualStudio)中时,我最初放置了一个between数据参数,该参数级联到另外两个选项以选择案例类型和位置。我将这些作为单独的数据集来链接参数以级联它们。这一切都很好。只有在我对报告进行最后检查时,我才意识到我无法获得2017年10月27日之后的任何数据任何数

这解释起来有点尴尬,所以我会尽力的

我在SSMS 17中编写了一个查询。查询运行良好,并正确返回1990-01-01至2018-03-04的数据。这是正确的,2018-03-04是该查询的最新案例

当将这个精确的查询放到SSRS(VisualStudio)中时,我最初放置了一个between数据参数,该参数级联到另外两个选项以选择案例类型和位置。我将这些作为单独的数据集来链接参数以级联它们。这一切都很好。只有在我对报告进行最后检查时,我才意识到我无法获得2017年10月27日之后的任何数据任何数据上都没有筛选器。

最后,我已经删除了所有参数,所以它只是主要的数据集,并加入了一个代码来提取过去两年的数据。这仍然在2017年10月27日结束。有人知道在SSMS中运行的同一查询如何正确返回数据,但复制并粘贴在SSRS中,而不是突然无法通过2017-10-27吗

当时只有1615行,所以并不是有大量的数据,我已经达到了一些极限

真的被这个难住了。我没有发布我的代码,因为它在SSMS中工作没有问题,所以我不相信问题存在

这是当前使用的代码。日期的长实例是将UTC数据库时间计数器设置为BST

 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
 SET NOCOUNT ON;
 SET ARITHABORT ON;

 WITH cvr AS
 (
 SELECT DISTINCT 
                        hcx.mps_Person,
                        cpx.mps_Name [Name],
 CASE       WHEN hcx.mps_SchemeCode IS NULL THEN LTRIM(RTRIM(hcx.mps_MembershipNumber)) 
            WHEN hcx.mps_SchemeCode = '' THEN LTRIM(RTRIM(hcx.mps_MembershipNumber)) 
            WHEN hcx.mps_SchemeCode IS NOT NULL THEN LTRIM(RTRIM(hcx.mps_SchemeCode))+'/'+LTRIM(RTRIM(hcx.mps_MembershipNumber)) ELSE NULL END AS [Membership Number],
                        hcx.mps_MemberCoverStatus [Cover Status],
                         cmd.[Country of Incident] [Case Country],
 CASE       WHEN hcx.mps_CoverSource = 0 THEN 'Cover Account' 
            WHEN hcx.mps_CoverSource = 1 THEN 'SAM Cover' 
            WHEN hcx.mps_CoverSource = 2 THEN 'MDU Transfer Cover' ELSE NULL END AS [Cover Source],
 CASE       WHEN hcx.mps_startdate > (DATEADD(HH,1,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,hcx.mps_startdate) AS CHAR) + '/03/01'),30))/7*7,'19000107')))) AND hcx.mps_startdate < (DATEADD(HH,2,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,hcx.mps_startdate) AS CHAR) + '/10/01'),30))/7*7,'19000107')))) THEN (DATEADD(HH,1,hcx.mps_startdate)) ELSE hcx.mps_startdate END AS [CM Cover Start Date],
 CASE       WHEN hcx.mps_enddate > (DATEADD(HH,1,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,hcx.mps_enddate) AS CHAR) + '/03/01'),30))/7*7,'19000107')))) AND hcx.mps_enddate < (DATEADD(HH,2,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,hcx.mps_enddate) AS CHAR) + '/10/01'),30))/7*7,'19000107')))) THEN (DATEADD(HH,1,hcx.mps_enddate)) ELSE hcx.mps_enddate END AS [CM Cover End Date],
                        cmd.[Case Number] AS [Case Number],
                        cmd.IncidentId,
                        cmd.[Medical/Dental] AS [Medical/Dental],
                        cmd.[Primary Case Type] AS [Incident Primary Case Type],
                        cmd.[Case Types] AS [Incident Case Types],
                        cpx.mps_dn_CaseTypesInvolved AS [Member Involved Case Types],
 CASE       WHEN cpx.mps_involvedfrom > (DATEADD(HH,1,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,cpx.mps_involvedfrom) AS CHAR) + '/03/01'),30))/7*7,'19000107')))) AND cpx.mps_involvedfrom < (DATEADD(HH,2,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,cpx.mps_involvedfrom) AS CHAR) + '/10/01'),30))/7*7,'19000107')))) THEN (DATEADD(HH,1,cpx.mps_involvedfrom)) ELSE cpx.mps_involvedfrom END AS [Involved From],
 CASE       WHEN cpx.mps_involvedto > (DATEADD(HH,1,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,cpx.mps_involvedto) AS CHAR) + '/03/01'),30))/7*7,'19000107')))) AND cpx.mps_involvedto < (DATEADD(HH,2,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,cpx.mps_involvedto) AS CHAR) + '/10/01'),30))/7*7,'19000107')))) THEN (DATEADD(HH,1,cpx.mps_involvedto)) ELSE cpx.mps_involvedto END AS [Involved To],
 CASE       WHEN cpx.mps_claimsmadenotificationdate > (DATEADD(HH,1,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,cpx.mps_claimsmadenotificationdate) AS CHAR) + '/03/01'),30))/7*7,'19000107')))) AND cpx.mps_claimsmadenotificationdate < (DATEADD(HH,2,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,cpx.mps_claimsmadenotificationdate) AS CHAR) + '/10/01'),30))/7*7,'19000107')))) THEN (DATEADD(HH,1,cpx.mps_claimsmadenotificationdate)) ELSE cpx.mps_claimsmadenotificationdate END AS [Claims Made Notification Date],
 CASE       WHEN cmd.[MPS Claim Date] > (DATEADD(HH,1,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,cmd.[MPS Claim Date]) AS CHAR) + '/03/01'),30))/7*7,'19000107')))) AND cmd.[MPS Claim Date] < (DATEADD(HH,2,(DATEADD(DAY,DATEDIFF(DAY,'19000107',DATEADD(MONTH,DATEDIFF(MONTH,0,CAST(DATEPART(YEAR,cmd.[MPS Claim Date]) AS CHAR) + '/10/01'),30))/7*7,'19000107')))) THEN (DATEADD(HH,1,cmd.[MPS Claim Date])) ELSE cmd.[MPS Claim Date] END AS [MPS Claim Date]
                        ,cmd.[Total Claim Payments (Sterling Equivalent in £)] AS [TotalClaimPayments]
                        ,cmd.[Total Non-Claim Payments (Sterling Equivalent in £)] AS [TotalNonClaimPayments]
                        ,FLOOR(cmd.[MPS Apportionment %]*100) AS [Liability]

 FROM       OneMPS_MSCRM.dbo.mps_historiccoveraccountExtensionBase AS hcx
     INNER JOIN OneMPS_MSCRM.dbo.mps_historiccoveraccountBase AS hca ON hca.mps_historiccoveraccountId = hcx.mps_historiccoveraccountId AND hca.statuscode = 1 /*Active*/
     INNER JOIN OneMPS_MSCRM.dbo.mps_casepartyExtensionBase AS cpx  ON hcx.mps_Person = cpx.mps_Person
     INNER JOIN OneMPS_MSCRM.dbo.mps_casepartyBase AS cpb ON cpx.mps_casepartyId = cpb.mps_casepartyId AND cpb.statuscode = 1 /*Active*/ AND cpx.mps_PrimaryRole = 0
     INNER JOIN dbo.CasesMasterData AS cmd ON cmd.incidentid = cpx.mps_Case

 WHERE  hcx.mps_CoverBasis = 'Claims Made'
     AND hcx.mps_IsSuperseded = 0 /*Not Superseded*/
     AND cpx.mps_involvedto >= hcx.mps_StartDate /*Intersects with Period of Involvement*/
     AND cpx.mps_involvedfrom <= hcx.mps_EndDate /*Intersects with Period of Involvement*/
     AND cpx.mps_InvolvedFrom >= '1990-01-01 00:00:00.000'
 )
 ,cts AS
 (
 SELECT 
             cvr.mps_Person,
             cvr.[Cover Source],
             cvr.Name,
             cvr.[Membership Number],
             cvr.[Cover Status],
             cvr.[CM Cover Start Date],
             cvr.[CM Cover End Date],
             cvr.[Case Number],
             cvr.IncidentId,
             cvr.[Involved From],
             cvr.[Involved To],
             cvr.[Claims Made Notification Date],
             cvr.[MPS Claim Date],
             cvr.[Medical/Dental],
             cvr.[Case Country],
             cvr.[Incident Primary Case Type],
             cvr.[Incident Case Types],
             cvr.[Member Involved Case Types],
 CASE       WHEN LEAD(cvr.[CM Cover Start Date],1,0) OVER (PARTITION BY cvr.mps_person, cvr.[Membership Number], cvr.[Case Number] ORDER BY cvr.[CM Cover Start Date]) = cvr.[CM Cover Start Date]
        AND LEAD(cvr.[CM Cover End Date],1,0) OVER (PARTITION BY cvr.mps_person, cvr.[Membership Number], cvr.[Case Number] ORDER BY cvr.[CM Cover Start Date]) = cvr.[CM Cover End Date] THEN NULL
            ELSE DATEDIFF(d,cvr.[CM Cover Start Date],cvr.[CM Cover End Date]) END [CM Cover Days],
 (SELECT MIN(cvr_sd.[CM Cover Start Date]) FROM cvr cvr_sd WHERE cvr_sd.mps_Person = cvr.mps_Person AND cvr_sd.[Membership Number] = cvr.[Membership Number] AND cvr_sd.[Case Number] = cvr.[Case Number]) [CM Cover Start Date (Min)],
 (SELECT MAX(cvr_ed.[CM Cover End Date]) FROM cvr cvr_ed WHERE cvr_ed.mps_Person = cvr.mps_Person AND cvr_ed.[Membership Number] = cvr.[Membership Number] AND cvr_ed.[Case Number] = cvr.[Case Number]) [CM Cover End Date (Max)],
 (SELECT COUNT(cvr_rw.mps_Person) FROM cvr cvr_rw WHERE cvr_rw.mps_Person = cvr.mps_Person AND cvr_rw.[Membership Number] = cvr.[Membership Number] AND cvr_rw.[Case Number] = cvr.[Case Number]) [Total Rows],
             cvr.TotalClaimPayments, 
             cvr.TotalNonClaimPayments, 
             cvr.Liability
 FROM   cvr
 )
 ,chk AS 
 (
 SELECT 
            cts.mps_Person,
            cts.[Case Number],
            cts.IncidentId,
            cts.[Membership Number],
     SUM(cts.[CM Cover Days]) AS [CM Cover Days],
    DATEDIFF(d,cts.[CM Cover Start Date (Min)],cts.[CM Cover End Date (Max)])-MAX(cts.[Total Rows]) AS [CM Cover Days (If Unbroken)]
 FROM   cts
 GROUP BY
             cts.mps_Person,
             cts.[Case Number],
             cts.IncidentId,
             cts.[Membership Number],
             cts.[CM Cover Start Date (Min)],
             cts.[CM Cover End Date (Max)],
             cts.[Case Country]
 )
 SELECT
            cts.Name,
            cts.[Membership Number],
            cts.[Cover Status],
            cts.[Cover Source],
            cts.[CM Cover Start Date],
            cts.[CM Cover End Date],
 CASE   WHEN chk.[CM Cover Days] >= DATEDIFF(d,cts.[CM Cover Start Date (Min)],cts.[CM Cover End Date (Max)])-cts.[Total Rows] THEN cts.[CM Cover Start Date (Min)] ELSE NULL END [CM Continuous Cover Start Date],
 CASE   WHEN chk.[CM Cover Days] >= DATEDIFF(d,cts.[CM Cover Start Date (Min)],cts.[CM Cover End Date (Max)])-cts.[Total Rows] THEN cts.[CM Cover End Date (Max)] ELSE NULL END [CM Continuous Cover End Date],
            a2a.[A2A Decision],
            a2a.[A2A Decision Reason],
            cts.[Case Number],
            cts.[Involved From] AS [Involved From Date],
            cts.[Involved To] AS [Involved To Date],
            cts.[Claims Made Notification Date] AS [Claims Made Notification Date],
            cts.[MPS Claim Date],
            cts.[Medical/Dental],
            cts.[Case Country],
            cts.[Incident Primary Case Type],
            cts.[Incident Case Types],
            cts.[Member Involved Case Types],
            mbr.[# Members Involved],
    SUM(ISNULL(cts.TotalClaimPayments,0)+ISNULL(cts.TotalNonClaimPayments,0)) AS [TotalSpend],
            ISNULL(cts.TotalClaimPayments,0) AS [Claim Payments - Total (£)],
    CAST(cts.Liability*(cts.TotalClaimPayments/100) AS NUMERIC(14,2)) AS [Claim Payments - Apportioned to Member (£)],
            ISNULL(cts.TotalNonClaimPayments,0) AS [Non-Claim Payments - Total (£)],
            cts.Liability AS [MPSClaimLiability]
 FROM   cts
        INNER JOIN chk ON chk.[Case Number] = cts.[Case Number] AND chk.[Membership Number] = cts.[Membership Number] AND chk.mps_Person = cts.mps_Person

OUTER APPLY
 (
 SELECT TOP 1
 CASE    WHEN   adx.mps_Decision = 0 THEN 'No' 
         WHEN   adx.mps_Decision = 1 THEN 'Yes' 
         WHEN   adx.mps_Decision = 2 THEN 'Pending' 
         WHEN   adx.mps_Decision = 3 THEN 'No - Member Declined' 
         WHEN   adx.mps_Decision = 4 THEN 'Yes - Ex Gratia' 
         WHEN   adx.mps_Decision = 5 THEN 'No - Member Uncontactable/Not Responding'
         ELSE NULL END AS [A2A Decision],
            adx.mps_DecisionReason AS [A2A Decision Reason]

 FROM   OneMPS_MSCRM.dbo.mps_authoritytoassistdecisionBase AS adb
 INNER JOIN OneMPS_MSCRM.dbo.mps_authoritytoassistdecisionExtensionBase adx ON adb.mps_authoritytoassistdecisionId = adx.mps_authoritytoassistdecisionId AND adb.statuscode IN (2) /*2=Valid*/
 INNER JOIN OneMPS_MSCRM.dbo.mps_casepartyExtensionBase cpx ON cpx.mps_casepartyId = adx.mps_CaseParty
 INNER JOIN OneMPS_MSCRM.dbo.mps_casepartyBase cpb ON cpx.mps_casepartyId = cpb.mps_casepartyId AND cpb.statuscode = 1 /*Active*/ AND cpx.mps_PrimaryRole = 0

 WHERE          cpx.mps_Case = cts.IncidentId

 ORDER BY  adx.mps_DecisionOn DESC 
 ) AS a2a
 OUTER APPLY
 (
 SELECT TOP 1 COUNT(cpx.mps_casepartyId) AS [# Members Involved]
 FROM   OneMPS_MSCRM.dbo.mps_casepartyExtensionBase cpx 
 INNER JOIN OneMPS_MSCRM.dbo.mps_casepartyBase cpb ON cpx.mps_casepartyId = cpb.mps_casepartyId AND cpb.statuscode = 1 /*Active*/ AND cpx.mps_PrimaryRole = 0

 WHERE cpx.mps_Case = cts.IncidentId
 ) AS mbr

 GROUP BY        cts.Name,
                 cts.[Membership Number],
                 cts.[Cover Status],
                 cts.[Cover Source],
                 cts.[CM Cover Start Date],
                 cts.[CM Cover End Date],
 CASE WHEN chk.[CM Cover Days] >= DATEDIFF(d,cts.[CM Cover Start Date (Min)],cts.[CM Cover End Date (Max)])-cts.[Total Rows] THEN cts.[CM Cover Start Date (Min)] ELSE NULL END,
 CASE WHEN chk.[CM Cover Days] >= DATEDIFF(d,cts.[CM Cover Start Date (Min)],cts.[CM Cover End Date (Max)])-cts.[Total Rows] THEN cts.[CM Cover End Date (Max)] ELSE NULL ENd,
                 a2a.[A2A Decision],
                 a2a.[A2A Decision Reason],
                 cts.[Case Number],
                 cts.[Involved From],
                 cts.[Involved To] ,
                 cts.[Claims Made Notification Date],
                 cts.[MPS Claim Date],
                 cts.[Medical/Dental],
                 cts.[Case Country],
                 cts.[Incident Primary Case Type],
                 cts.[Incident Case Types],
                 cts.[Member Involved Case Types],
                 mbr.[# Members Involved],
                cts.TotalClaimPayments ,
                CAST(cts.Liability*(cts.TotalClaimPayments/100) AS NUMERIC(14,2)),
                cts.TotalNonClaimPayments,
                cts.Liability
                ORDER BY cts.[Involved From] ASC 
第一行在SSRS中显示良好,第二行完全不可见。这项工作将完成的主要日期是[涉及的日期]的最后一个日期。
我能想到的唯一一件事是BST转换可能会以某种方式影响它,因为这是我对日期所做的唯一一件事

将此查询加载到SP中,并给出SP的源代码,我希望这将解决问题,因为代码非常庞大

您已将事务隔离级别设置为“读取未提交”
由于此隔离级别会话,同一查询可能返回两个不同的数据集。如果事务下的任何表被更新(插入、更新或删除),而未提交或回滚的同一事务未完成,则未提交的值将在“读取未提交”隔离事务会话的select查询中显示(脏读)。
因此,设置事务隔离级别快照


嗨,所有的道歉,我似乎已经想得太多了。感谢那些提出想法的人

它原来是共享数据源,我们有一个实时和测试环境。数据源说它指向live,但当我检查连接字符串时(为什么我之前没有想到它),它实际上是在查找数据有限的测试服务器


用这个看不见树林:)所以吸取了教训。记住检查连接字符串,而不仅仅是名称

请发布一些示例代码、模式和数据。它可能与由设置选项、空处理等引起的无提示错误有关。在SSMS中运行代码可能会给其他客户端带来不同的结果,例如ARITHABORT@gbn添加了代码,但它是一个很长的一个和一些样本数据来尝试帮助;1.如果从SSRS数据集查询设计器运行代码并键入参数,您会得到正确的结果还是“截断”版本?2.你确定你的SSRS数据集指向与SSMS相同的服务器/数据库,而不是某个开发或UAT服务器吗?@AlanSchofield Hi Alan,你的回答是在我在下面发表我自己的评论的同时出现的,但它指向了错误的服务器。共享数据源说这是我们的“实时”服务器,但当我检查连接字符串时,它指向测试。测试数据比我们的实时数据少,但SSMS查询直接实时。鸡蛋在我脸上!我想我想我太多了,可能出了什么问题,看不见树木了。没问题,很高兴你把问题解决了。。。我自己也做过很多次同样的事情。
Name|Membership Number|CoverStatus|Cover Date             |Involved From 
Bob |984684638        |Active     |2017-03-01 00:00:00.000|2017-10-27 00:00:00.000
Test|135486968        |Active     |2017-07-01 00:00:00.000|2018-03-04 00:00:00.000