【问题标题】:SQl - An expression of non-boolean type specified in a context where a condition is expected, near ')'SQl - 在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'
【发布时间】:2017-05-11 11:59:14
【问题描述】:

在 SQL Server 2014 中使用以下查询出现此错误。

SELECT 
      [Case]
      ,[Course]
      ,[Device]
      ,[IntegerValue]     
      ,[Question]
      ,IFL.[QuestionSimplified]
      ,[Revision]
      ,[Script]    
      ,[TextValue]
      ,[Timestamp]
      ,[Type]
      ,[Variable]     
      ,[Wave]
  FROM [dbo].[CosmosData] CD
  Left Outer join [dbo].[ImportedFacilityList] IFL on CD.[Variable] = IFL.[Variablename]
  where 
CD.[Script] = 'CARD-F' and 

(select  * from [dbo].[CosmosData] where Variable = 'SURVEY_TYPE' and IntegerValue = '2')

当我运行上述查询时,出现以下错误,

消息 4145,第 15 级,状态 1,第 20 行 在预期条件的上下文中指定的非布尔类型表达式,靠近 ')'。

有什么帮助吗?

【问题讨论】:

  • 你应用什么标准来测试你在 where 子句中的选择?
  • @jimmy8ball 我想显示来自数据库“CosmosData”的记录,其中列变量 = 'SURVEY_TYPE' 列 IntegerValue = '2'
  • 您正在测试哪些数据项是否存在于 cosmos 数据中?
  • 一个更好的问题,该表中的哪些字段组合构成唯一记录?
  • @jimmy8ball 谢谢,我设法得到了答案

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


【解决方案1】:

你在where 子句中有这个:

and (select  * from [dbo].[CosmosData] where Variable = 'SURVEY_TYPE' and IntegerValue = '2')

SQL 需要一个 boolean 表达式。这通常通过使用= 或类似的比较运算符形成。就你而言,我认为你只是存在exists

exists (select  * from [dbo].[CosmosData] where Variable = 'SURVEY_TYPE' and IntegerValue = 2)

也就是说,您可能还需要一个关联子句。

注意:我从整数值中删除了单引号。仅对字符串和日期常量使用单引号。

【讨论】:

    【解决方案2】:

    基于您在此表中使用 case 作为键的假设,您可以使用以下方法从 cosmos 数据中返回应用了您的条件的所有行,并且 where 子句中的 select 使用其中的条件进行匹配它。

     SELECT 
      [Case]
      ,[Course]
      ,[Device]
      ,[IntegerValue]     
      ,[Question]
      ,IFL.[QuestionSimplified]
      ,[Revision]
      ,[Script]    
      ,[TextValue]
      ,[Timestamp]
      ,[Type]
      ,[Variable]     
      ,[Wave]
    FROM [dbo].[CosmosData] CD
    Left Outer join [dbo].[ImportedFacilityList] IFL on CD.[Variable] = IFL.  [Variablename]
    where CD.[Script] = 'CARD-F' 
    and Case
     IN
     (select  Case from [dbo].[CosmosData] where Variable = 'SURVEY_TYPE' and     IntegerValue = '2')
    

    希望对大家有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多