SQL Server存储过程和用户​​查询之间的差异

时间:2016-03-08 14:16:36

标签: sql sql-server tsql stored-procedures

我们有一个存储过程,它从几个不同的表中提取信息以显示一些信息。这很好用。

我们现在想要"借用"一些代码和我试图做一些开发工作。当我将存储过程的内容复制到查询窗口并运行它(减去存储过程相关的东西)时,它成功完成但没有返回结果 - 实际上#test2没有填充。通过存储过程运行相同的结果通常会返回结果。

代码位于查询下方 - 存储过程与ALTER PROCEDURE相同,我更改了所有表名等...

    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    DECLARE @reportstart smalldatetime, @reportend smalldatetime  

    SET @reportend = 2016-01-01
    SET @reportstart = 2016-02-01

    SET NOCOUNT ON;

    SELECT 
        OPA10.[PATIENT PATHWAY IDENTIFIER], OPA10.RTTPeriod  
    INTO #TEST
    FROM
        (SELECT
             PL.[PATIENT PATHWAY IDENTIFIER], PL.RTTPERIOD    
         FROM 
             [PATHWAY LTR] AS PL 
         INNER JOIN
             [PATHWAY LTR] AS PL2 ON PL.[PATIENT PATHWAY IDENTIFIER] = PL2.[PATIENT PATHWAY IDENTIFIER] 
                                  AND PL.LTRSequence = PL2.LTRSequence  +1
         INNER JOIN
             [PATIENT PATHWAY] AS PP ON PL.[PATIENT PATHWAY IDENTIFIER] = PP.[PATIENT PATHWAY IDENTIFIER] 
         WHERE
             PL.ActivityType = 'OPD'
             AND PL.LTRSequence = 3 
             AND (PL2.OPDisposal IN ('05', '08') 
              OR PL2.ActivityStatus IN ('DNA', 'CND'))) OPA10

    SELECT DISTINCT
        [PATIENT PATHWAY].[LOCAL PATIENT IDENTIFIER],
        [RTT PERIOD].[PATIENT PATHWAY IDENTIFIER], pd.Surname,
        [RTT PERIOD].[RTT PERIOD ID WITHIN PATHWAY], 
        CAST([RTT PERIOD].[REFERRAL TO TREATMENT PERIOD START DATE] AS DATE) as 'RTT START DATE', 
        CAST([RTT PERIOD].[REFERRAL TO TREATMENT PERIOD END DATE] AS DATE) AS 'RTT END DATE', 
        [RTT PERIOD].[RTT SPECIALTY],
        CAST(DATEADD(D,126,[RTT PERIOD].[REFERRAL TO TREATMENT PERIOD START DATE])AS DATE) AS 'BREACH DATE',
        'BREACH FLAG' = CASE 
                           WHEN CAST(DATEADD(D, 126, [RTT PERIOD].[REFERRAL TO TREATMENT PERIOD START DATE]) AS DATE) < CAST([RTT PERIOD].[REFERRAL TO TREATMENT PERIOD END DATE] AS DATE)
                              THEN 'NOT WITHIN'
                              ELSE 'WITHIN'
                        END,
        --DATEDIFF(DD, CAST([RTT PERIOD].[REFERRAL TO TREATMENT PERIOD START DATE] as date), 
        --CAST([RTT PERIOD].[REFERRAL TO TREATMENT PERIOD END DATE] AS date)) AS UNADJWAITDAYS,
        [RTT PERIOD].[RTT CLOCK STOP ACTIVITY], 
        [RTT PERIOD].[RTT CLOCK STOP ACTIVITY STATUS], 
        [RTT PERIOD].[RTT COMMISSIONER], [RTT PERIOD].[SHARED BREACH],
        [PATIENT PATHWAY SITE].[18WKSITE],
        [MERGE SPECIALTY].[DESCRIPTION],
        [MERGE SPECIALTY].[MERGE SPECIALTY],
        --,WLREMOVAL.Comment 
        --,[PATHWAY LTR].[InternalPatientNumber(iSOFT-PAS)]
        --,[PATHWAY LTR].[InternalEpisodeNumber(iSOFT-PAS)]
        --,[PATHWAY LTR].EpsActvDtime
        [PATHWAY LTR].LTRSequence,
        [PATIENT PATHWAY SITE].[18WK provider]
    INTO 
        #TEST2
    FROM         
        [RTT PERIOD] 

    /*  ************************
        THIS CODE HAS BEEN ADDED TO GET THE SITE FLAG
        ************************/
    INNER JOIN
        [PATIENT PATHWAY SITE] ON [RTT PERIOD].[PATIENT PATHWAY        IDENTIFIER] = [PATIENT PATHWAY SITE].[PATIENT PATHWAY IDENTIFIER]
    /****************************************/

    INNER JOIN
        [PATIENT PATHWAY] ON [RTT PERIOD].[PATIENT PATHWAY IDENTIFIER] = [PATIENT PATHWAY].[PATIENT PATHWAY IDENTIFIER]
    INNER JOIN 
        [PATHWAY LTR] ON [RTT PERIOD].[PATIENT PATHWAY IDENTIFIER] = [PATHWAY LTR].[PATIENT PATHWAY IDENTIFIER]
                      --and [RTT PERIOD].[RTT PERIOD ID WITHIN PATHWAY] = [PATHWAY LTR].RTTActivityID 
                      --and [PATHWAY LTR].RTTActivityID = 1
                      AND [PATHWAY LTR].EpsActvDtime = [RTT PERIOD].[REFERRAL TO TREATMENT PERIOD END DATE]
    --left outer join [iSOFT-PAS_Landing].dbo.WLREMOVAL on
       --[PATHWAY LTR].[InternalPatientNumber(iSOFT-PAS)] = WLREMOVAL.InternalPatientNumber
      --and [PATHWAY LTR].EpsActvDtime = WLREMOVAL.EpsActvDtimeInt
    INNER JOIN
        [iSOFT-PAS_Landing].dbo.PATDATA as PD ON [PATIENT PATHWAY].[InternalPatientNumber(iSOFT-PAS)] = PD.InternalPatientNumber
    LEFT OUTER JOIN
        [18-Weeks].dbo.[MERGE SPECIALTY] ON [MERGE SPECIALTY].[RTT SPECIALTY] = [RTT PERIOD].[RTT SPECIALTY]
    WHERE       
        ([RTT PERIOD].[REFERRAL TO TREATMENT PERIOD END DATE] >= @reportstart) 
        AND ([RTT PERIOD].[REFERRAL TO TREATMENT PERIOD END DATE] < @reportend ) 
        AND ([RTT PERIOD].[RTT PERIOD TYPE] = 'N') 
        AND ([RTT PERIOD].[REFERRAL TO TREATMENT STATUS AT END OF PERIOD]) <>'33' 
        AND ([RTT PERIOD].[RTT CLOCK STOP ACTIVITY]) <> 'opd' 
        AND ([PATHWAY LTR].[ActivityType]) <> 'WADD' 
        AND ([RTT PERIOD].[RTT PERIOD ID WITHIN PATHWAY]) =1
        --and [PATIENT PATHWAY SITE].[18WK provider]='RN700'
        OR ([RTT PERIOD].[REFERRAL TO TREATMENT PERIOD END DATE] >= @reportstart) 
        AND ([RTT PERIOD].[REFERRAL TO TREATMENT PERIOD END DATE] < @reportend) 
        AND ([RTT PERIOD].[RTT PERIOD TYPE] = 'N') 
        AND ([RTT PERIOD].[REFERRAL TO TREATMENT STATUS AT END OF PERIOD]) <>'33' 
        AND ([RTT PERIOD].[RTT CLOCK STOP ACTIVITY]) <> 'opd' 
        AND ([PATHWAY LTR].[ActivityType]) = 'book' 
        AND ([RTT PERIOD].[RTT PERIOD ID WITHIN PATHWAY]) = 2
        --and [PATIENT PATHWAY SITE].[18WK provider]='RN7

   SELECT t2.* 
   FROM #TEST2 AS T2
   LEFT OUTER JOIN #TEST AS T ON T2.[PATIENT PATHWAY IDENTIFIER] = T.[PATIENT PATHWAY IDENTIFIER]
                               AND T2.[RTT PERIOD ID WITHIN PATHWAY] = T.RTTPeriod
   WHERE
       t.[PATIENT PATHWAY IDENTIFIER] IS NULL


   select * from #TEST
   select * from #TEST2

        -- drop table #TEST2
        -- drop table #TEST

1 个答案:

答案 0 :(得分:2)

您需要使用'引用日期:

DECLARE @reportstart smalldatetime, @reportend smalldatetime;                 

SET @reportend = '2016-01-01';
SET @reportstart = '2016-02-01';

否则,您将获得从INTDATE的隐式转换,即1905年。

LiveDemo

它与此类似:

SET @reportend = 2016-01-01;
--SET @reportend = 2014   -- int
--SET @reportend = DATEADD(d, 2014,'1900-01-01')
--SET @reportend = '1905-07-08 00:00:00'

我非常怀疑你有来自1905

的数据