0

我正在研究一个 2 年前担任我职位的人的代码,并且在破译他们的 SQL 代码块时遇到了麻烦。

WHERE  ACCOUNT NOT IN (SELECT ACCOUNT
                   FROM   MWAPPTS A1
                   WHERE  A1.ACCOUNT = A.ACCOUNT
                          AND ADATE > dbo.Endofmonth(ACTIONDATE)
                          AND REASON IN ('CPE','NPPE')
                          AND USERFLAG IN ( 'U', 'B' ))

dbo.Endofmonth是一个存储过程,它获取输入日期的月份的最后一天。

如果我没看错,我们不包括显示的 select 语句将返回帐户的行。我在选择语句时遇到问题。我是否正确,它正在ACCOUNTADATE月底更早。原因是“CPE”还是“NPPE”,USERFLAG是“U”还是“B”?

4

2 回答 2

1

是的,您要退回帐户没有以下内容的记录:

1)ADATE大于函数返回的日期dbo.Endofmonth(ACTIONDATE)

2) 一个ReasonCPE or NPPE

3) 并且UserflagU or B

您必须查看函数中的代码dbo.Endofmonth(ACTIONDATE)以确定它返回的确切内容。

于 2012-07-27T20:03:46.540 回答
1

我是否正确,它正在获得 ADATE 比月底大的 ACCOUNT。

内部本身正在SELECT寻找月末之后的条目。然后,外部的应该从 检索帐户是月末的行。ADATEACTIONDATENOT INSELECTADATE<=ACTIONDATE

你的其他假设似乎是正确的。

旁白:它似乎dbo.Endofmonth是一个用户定义的函数,而不是一个存储过程(或者不可能这样调用它)。

于 2012-07-27T20:05:08.720 回答