我正在处理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语句将返回帐户的行。我遇到了select语句的问题。我是否正确ACCOUNT
ADATE
比{月1日}更早。原因是“CPE”或“NPPE”,而USERFLAG
是“U”还是“B”?
答案 0 :(得分:1)
是的,您将返回帐户中没有以下内容的记录:
1)ADATE
大于函数dbo.Endofmonth(ACTIONDATE)
返回的日期。
2)Reason
CPE or NPPE
3)Userflag
是U or B
。
您必须查看函数dbo.Endofmonth(ACTIONDATE)
中的代码才能确切地确定它返回的内容。
答案 1 :(得分:1)
我是否更正了ADATE比年末更早的ACCOUNT。
内部SELECT
本身正在寻找ADATE
在{/ 1}}月末之后 的条目。然后,外部ACTIONDATE
中的NOT IN
应该从SELECT
检索帐户ADATE
为<=
月末的行。
您的其他假设似乎是正确的。
旁白:似乎ACTIONDATE
是用户定义的函数,而不是存储过程(或者不可能像那样调用它)。