2016-03-08 69 views
0

我們有一個存儲過程,它從幾個不同的表中提取信息以顯示一些信息。這工作正常。SQL Server存儲過程和用戶​​查詢之間的區別

我們現在想要「借用」一些代碼,我正在嘗試做一些開發工作。當我將存儲過程的內容複製到查詢窗口並運行它(減去存儲過程相關的東西)時,它會成功完成,但不會返回任何結果 - 事實上,#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 
+0

有數據你是否在同一臺服務器_and_數據庫,在那裏SP上執行這個查詢被儲存了? –

回答

2

需要引用日期'

DECLARE @reportstart smalldatetime, @reportend smalldatetime;     

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

否則你會得到DATEINT隱式轉換是一年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

+0

剛剛嘗試過,仍然存在相同的問題 - 測試已填充,但test2沒有數據返回。作爲SP運行它填充兩個。 – Loveh8tragedy1902

+2

@ Loveh8tragedy1902首先提供http://sqlfiddle.com演示樣本數據。很難調試代碼,特別是沒有格式化,死代碼(註釋行)和對多個表的引用。您還應該建議更改命名約定。 – lad2025

相關問題