Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 WHERE子句-通知_Sql_Sql Server 2008 - Fatal编程技术网

SQL Server WHERE子句-通知

SQL Server WHERE子句-通知,sql,sql-server-2008,Sql,Sql Server 2008,我试图在一个包含多个选项的SQL脚本中获得结果。我终于得到了我需要的结果 where (RTRIM(FMLS.REGION)) IN (@Region) and (RTRIM(FMB0.COUNTRY))IN (@Country) and (RTRIM(FMB0.SITECODE)) IN (@Site) and (RTRIM(FMB0.BLDGCODE)) IN (@Building) and ( ( (RTRIM(FMA0.SPACETYPE) NOT IN ('A-OF

我试图在一个包含多个选项的SQL脚本中获得结果。我终于得到了我需要的结果

where 
(RTRIM(FMLS.REGION)) IN (@Region) and 
(RTRIM(FMB0.COUNTRY))IN (@Country) and 
(RTRIM(FMB0.SITECODE)) IN (@Site) and 
(RTRIM(FMB0.BLDGCODE)) IN (@Building) and 
( 
 ( 
  (RTRIM(FMA0.SPACETYPE) NOT IN ('A-OFF-AS','A-WKS-AS') AND ((RTRIM(FMA0.SPCODE) <> '') AND (FMA0.SPCODE IS NOT NULL))) 
            AND 
  (RTRIM(FMA0.SPACETYPE) NOT LIKE 'CR-%' AND ((RTRIM(FMA0.SPCODE) <> '') AND (FMA0.SPCODE IS NOT NULL))) 
 ) 
 OR 
 ( 
  (RTRIM(FMA0.SPACETYPE) = 'A-OFF-AS' AND RTRIM(FMA0.SPCODE) NOT LIKE 'A-OFF-%') OR 
  (RTRIM(FMA0.SPACETYPE) = 'A-WKS-AS' AND RTRIM(FMA0.SPCODE) NOT LIKE 'A-WKS-%')OR 
  (RTRIM(FMA0.SPACETYPE) LIKE 'CR-%' AND RTRIM(FMA0.SPCODE) NOT LIKE 'CR-%') 
  ) 
)
在哪里
(RTRIM(FMLS.区域))位于(@区域)和
(RTRIM(FMB0.国家))位于(@国家)和
(@Site)中的(RTRIM(FMB0.SITECODE))和
(@建筑)中的(RTRIM(FMB0.BLDGCODE))和
( 
( 
(RTRIM(FMA0.SPACETYPE)不在('A-OFF-AS','A-WKS-AS')和((RTRIM(FMA0.SPCODE)')和(FMA0.SPCODE不为空)))
及
(RTRIM(FMA0.SPACETYPE)不象'CR-%'和((RTRIM(FMA0.SPCODE)')和(FMA0.SPCODE不为NULL)))
) 
或
( 
(RTRIM(FMA0.SPACETYPE)='A-OFF-AS'和RTRIM(FMA0.SPCODE)与'A-OFF-%'不同)或
(RTRIM(FMA0.SPACETYPE)='A-WKS-AS'和RTRIM(FMA0.SPCODE)与'A-WKS-%'不同)或
(RTRIM(FMA0.SPACETYPE)与'CR-%'类似,而RTRIM(FMA0.SPCODE)与'CR-%'不同)
) 
)
但我关心的是,在这两行中,需要使用AND

  (RTRIM(FMA0.SPACETYPE) NOT IN ('A-OFF-AS','A-WKS-AS') AND ((RTRIM(FMA0.SPCODE) <> '') AND (FMA0.SPCODE IS NOT NULL))) 
            AND 
  (RTRIM(FMA0.SPACETYPE) NOT LIKE 'CR-%' AND ((RTRIM(FMA0.SPCODE) <> '') AND (FMA0.SPCODE IS NOT NULL)))
(RTRIM(FMA0.SPACETYPE)不在('A-OFF-AS','A-WKS-AS')和((RTRIM(FMA0.SPCODE)')和(FMA0.SPCODE不为空)))
及
(RTRIM(FMA0.SPACETYPE)不象'CR-%'和((RTRIM(FMA0.SPCODE)')和(FMA0.SPCODE不为NULL)))
我认为应该是OR,因为我希望得到两行的FMA0.SPCODE都为空或null的结果,如下所示

  (RTRIM(FMA0.SPACETYPE) NOT IN ('A-OFF-AS','A-WKS-AS') AND ((RTRIM(FMA0.SPCODE) <> '') OR (FMA0.SPCODE IS NOT NULL))) 
            OR 
  (RTRIM(FMA0.SPACETYPE) NOT LIKE 'CR-%' AND ((RTRIM(FMA0.SPCODE) <> '') OR (FMA0.SPCODE IS NOT NULL)))
(RTRIM(FMA0.SPACETYPE)不在('A-OFF-AS','A-WKS-AS')和((RTRIM(FMA0.SPCODE)')或(FMA0.SPCODE不为空)))
或
(RTRIM(FMA0.SPACETYPE)与'CR-%'和((RTRIM(FMA0.SPCODE)')或(FMA0.SPCODE不为NULL))不同)

但是如果我这样做,我会得到错误的结果。我想不出来,可能是看得太久了,或者括号放错了地方,但我看不出我做错了什么……请帮帮我,这让我发疯了

和带有否定表达式的
在逻辑上有点复杂。如果你说:

SPACETYPE NOT IN ('A-OFF-AS','A-WKS-AS') OR SPACETYPE NOT LIKE 'CR-%'
然后所有
SPACETYPE
都将通过此测试。考虑一个值,如<代码>这个“”,它不在第一个列表中,所以没问题。考虑一个值,如<代码> 'Af'作为'< /代码>。它位于第一个列表中,因此第一个条件失败。那么,转到第二个条件。没有匹配,所以它通过了。您可以在许多不同的值上尝试此操作,您会发现
将传递所有内容。事实上,上述逻辑相当于:

NOT (SPACETYPE IN ('A-OFF-AS','A-WKS-AS') AND SPACETYPE LIKE 'CR-%')
显然,
从来都不是真的,所以
不是
是假的。(注意:此讨论忽略
NULL
值。)

因此,
不起作用。让你高兴的是,
做了你想做的事。你只需要习惯复杂的布尔逻辑