【发布时间】:2010-07-07 17:16:41
【问题描述】:
我在理解 T-SQL (SQL Server 2000/2005) 查询中的以下 WHERE 子句时遇到了一些困难:
update #tempTable
SET
Total_Avg=isnull(TerminationReason,'terminated'),
Individual_Subscriptions=null,
Business_Subscriptions=null,
Other_subscriptions=null,
-- snip. 10 more fields set to NULL.
PMIE_BI=null,
Digital_Editions_BI=null
where
(
AbcTerminationDate<=dbo.fnGetPeriodFinalDate(@periodid)
and (AbcTerminationDate!=19000101 or AbcTerminationDate is null)
and (Total_Avg is not NULL or PrevTotalAvg is not NULL)
)
具体来说,第二个子句对我来说没有意义 - 它是由 OR 运算符分隔的 2 个子句似乎是矛盾的。
AbcTerminationDate 字段在名为 Members 的表中声明为 INT NULL。我相信系统中的日期 19000101 意味着 NULL 或默认值或无值,即成员未终止。因此,如果成员被标记为已终止,则查询似乎会清除大量字段/数字,这将是当 AbcTerminationDate 为 NULL 或具有默认值时。
在不知道更多信息的情况下,你怎么看?
【问题讨论】:
标签: sql-server tsql where-clause