我正在研究2年前持有我的职位的人员的代码,并且无法破译他们的SQL代码块。SQL Server查询解释
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语句将返回帐户的行。尽管我在选择语句时遇到了问题。我是否正确得到ACCOUNT
其中ADATE
比月末还要旧。原因是“CPE”还是“NPPE”,USERFLAG
是“U”还是“B”?
对我来说似乎是正确的。 – Kermit 2012-07-27 20:02:28
虽然月末函数非常方便,但您最好使用下界包含,上界独占式日期 - 即使用'aDate> = dbo.StartOfMonth(actionDate)';这也会使您更容易与时间戳等进行比较。我对这个声明的其余部分也很好奇,因为我不能动摇这种感觉,即有潜在的优化可用。噢 - 不要为数据类型后缀列名,将它命名为它的类型很明显,比如'actionOccurredOn'或类似的(我知道你可能不能更改数据库)。 – 2012-07-27 20:10:31
@ X-Zero我希望我可以发布整个SP,这样你就可以看到它有多糟糕,但不幸的是它是中间性的,因此受到HIPPA的保护。所有我继承的代码都非常糟糕,我会尽可能地称它为可笑。 – Jeremy1026 2012-07-27 20:15:34