Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server查询解释_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

SQL Server查询解释

SQL Server查询解释,sql,sql-server,sql-server-2008-r2,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)

我正在处理一位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语句有问题。如果
ADATE
早于月底,则它将获得
帐户
,这一点是否正确。原因是“CPE”或“NPPE”,并且
USERFLAG
是“U”或“B”?

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

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

2) 一个
原因
,即
CPE或NPPE

3) 而
Userflag
U或B

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

我是正确的,它正在获得帐户,其中ADATE的时间早于月底


内部
SELECT
本身正在查找
ADATE
ACTIONDATE
月底之后的条目。外部
选择
中的
不在
中,然后应检索帐户的
ADATE
所在的行
,而月末函数很方便,您最好使用下限包含、上限独占样式的日期-即使用
ADATE>=dbo.StartOfMonth(actionDate)
;这也会使您更容易与时间戳等进行比较。我对这句话的其余部分也很好奇,因为我无法摆脱存在潜在优化的感觉。哦-不要用数据类型作为列名的后缀,命名时要使其类型明显,比如,
actionocurredon
或类似的(我知道你可能无法更改数据库)。@X-Zero我希望我可以发布整个SP,这样你就可以看到它有多糟糕,但不幸的是,它本质上是中等的,因此受到HIPPA的保护。我继承的所有代码都很糟糕,我甚至认为这很可笑。我不是法律顾问/律师,但我不认为源代码被包括在内。显然,数据是真实的,不应该被共享(尽管它可能首先被匿名化)。