我有一个catch脚本,用于在总和为空值时插入并插入0,如果我分解了我正在使用的代码,则该脚本在一个查询上工作正常,但对当前查询却无效
Declare @Period int = 5
SELECT A.MATTER_CODE,DATEPART(month,A.DATE_OPENED) As DateOpened,B.DEPTNAME,B.DEPTCODE
INTO #TmpPREVYTD
FROM MATTER A
LEFT JOIN DEPT_MASTER B on A.DEPT_CODE = B.DEPTCODE
WHERE A.date_opened between DATEADD(YEAR,DATEDIFF(YEAR,DATEADD(YEAR,-1,GETDATE())),120) and
DATEADD(YEAR,120)
ORDER BY DATE_OPENED
这会在正确的年份和月份推出我查询所需的数据
SELECT COUNT(*) As 'Fin',Dateopened Into #TmpPFin FROM #TmpPREVYTD where DEPTCODE = 'FIN' GROUP BY
DATEOPENED
这在原始数据中每有一次与财务相关的工作都进行计数。
SELECT SUM(FIN)As Fin INTO #PFIN FROM #TmpPFIN WHERE Dateopened Between 5 and @Period
然后它汇总了与所需的设置月份有关的所有月份,因此在此示例中,我只希望它只计算May,其中没有任何内容,因此为什么要推入空值。
If EXISTS(Select Fin from #PFIN)
GOTO TmpITD
Else insert into #PFIN (Fin) Values( 0)
TmpITD:
最后,这是捕获程序,应该发现#PFin具有空值并插入0,但是我认为它正在直接进入TmpITD,就像我只是运行insert语句将其添加0。
因此,当前,如果我运行整个语句,我将不断获得空值,这意味着最后的报告将为空白。
我是否在这里遗漏了一些东西,因为这完全相同的代码可在其他查询中使用,但不适用于此查询,似乎它确实以某种方式存在但具有空值,这使我完全困惑。
编辑:如果我在TmpITD的末尾添加一些内容,它会将其推出,所以我现在可以确定的问题是,如果Exists认为它实际上为Null时确实存在,那么