[英]Differences between SQL Server stored procedure and user query
We have a stored procedure that pulls information from a few different tables to display some information. 我们有一个存储过程,该过程从几个不同的表中提取信息以显示一些信息。 This works fine.
这很好。
We now want to "borrow" some of the code and I'm trying to do some dev work. 现在,我们想“借用”一些代码,而我正在尝试做一些开发工作。 When I copy the contents of the stored procedure out into a query window and run it (minus the stored procedure related stuff), it completes successfully but no results are returned - in fact #test2 is not populated.
当我将存储过程的内容复制到查询窗口中并运行它时(减去与存储过程相关的内容),它成功完成但没有返回任何结果-实际上未填充#test2。 Running the same via the stored procedure returns results normally.
通过存储过程运行相同命令将正常返回结果。
Code is below from the query - stored procedure is the same just with ALTER PROCEDURE
and I have changed all the table names etc... 下面的代码来自查询-存储过程与
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
You need to quote date with '
: 您需要用
'
引用日期:
DECLARE @reportstart smalldatetime, @reportend smalldatetime;
SET @reportend = '2016-01-01';
SET @reportstart = '2016-02-01';
Otherwise you will get implicit conversion from INT
to DATE
which is year 1905. 否则,您将隐式地从
INT
转换为DATE
,即1905年。
It works similiar to this: 它的工作与此类似:
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'
I highly doubt that you have data from 1905
😎 我非常怀疑您有
1905
以来的数据😎
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.