SQL Server查询说明

时间:2012-07-27 19:59:34

标签: sql sql-server sql-server-2008-r2

我正在处理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”?

2 个答案:

答案 0 :(得分:1)

是的,您将返回帐户中没有以下内容的记录:

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

2)Reason CPE or NPPE

3)UserflagU or B

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

答案 1 :(得分:1)

  

我是否更正了ADATE比年末更早的ACCOUNT。

内部SELECT本身正在寻找ADATE在{/ 1}}月末之后 的条目。然后,外部ACTIONDATE中的NOT IN应该从SELECT检索帐户ADATE<=月末的行。

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

旁白:似乎ACTIONDATE是用户定义的函数,而不是存储过程(或者不可能像那样调用它)。