子查询返回的值超过1。子查询遵循=,!=,<,< =,>,> =时不允许这样做

时间:2013-12-16 04:16:54

标签: sql sql-server

我知道这个问题已经非常多余了,但在我的情况下,我无法弄清楚我的代码出了什么问题,或者我的表中的数据可能出错了。

我正在运行MS SQL 2005:

Select * 
from table
where [Scheduled Date] between '2013-07-01' and getdate()
Order by [Scheduled Date] asc

我做的两件事在我运行时结果很好:

  1. 我将getdate()更改为'2013-09-01'之类的内容,但我不认为问题出在getdate()函数中。
  2. 我总是得到:

      

    子查询返回的值超过1。这是不允许的   子查询跟随=,!=,<,< =,>,> =或当子查询用作   表达。

    1. 我尝试选择每一列。首先选择col_1(成功),添加col_2(成功),添加到col_9(成功),但当我尝试添加col_10时失败。我总共有13列。
    2. 的sp_help

      enter image description here

3 个答案:

答案 0 :(得分:2)

您在查询中使用了一个视图。

enter image description here

  

但是当我尝试添加col_10时,它失败了。

视图中的

col_10是一个返回多行的子查询。

答案 1 :(得分:-1)

我认为您的上述查询是某些主要查询的一部分。

同样在'2013-07-01'和getdate()之间 - 只返回行,因此您无法识别错误。

<2013>在“2013-07-01”和“2013-09-01”之间 - 这会返回许多暴露您的SQL的行。

所以你的查询错了。

答案 2 :(得分:-1)

那是因为where子句中的任何内容都必须是逻辑表达式。 Getdate()不是逻辑表达式。试试这个......

Select * from table
where [Scheduled Date] >= '2013-07-01' and [Scheduled Date] <= getdate()
Order by [Scheduled Date] asc