SSMS错误:子查询返回的值超过1 ...但没有子查询

时间:2011-02-06 23:25:03

标签: sql sql-server-2005

完整的错误消息是:子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。我能在其上找到的所有内容都只是说“是的,只需使用TOP 1即可。”只有我甚至没有子查询或选择语句。

以下是查询:

update f
set f.new_monthnumber = datediff(mm, dateadd(dd, dbo.ufn_GetDaysInMonth(a.new_opendate) -   16, a.new_opendate), f.new_submit_date) + 1
from FilteredAccount a 
    left outer join FilteredNew_Financials f on f.new_name = a.accountnumber
where f.new_monthnumber is null

ufn_GetDaysInMonth是一个用户定义的函数,它分析传递给它的日期并且根本不查询数据库,并且在任何情况下我都通过运行没有它的查询来确认它不是错误的原因。

任何人都知道这里到底发生了什么事?

2 个答案:

答案 0 :(得分:1)

鉴于编写此查询,我会交换表并使用内部联接,以便在UPDATE和FROM子句中都有“FilteredNew_Financials”,pheraps在两个表之间存在1对n的基数连接条件......也许你在表中有一些脏数据? 您确定“new_name”和“accountnumber”是主键还是外键(至少在逻辑上,如果不是结构上的话)?

答案 1 :(得分:0)

我会把查询写得略有不同:

update FilteredNew_Financials
set new_monthnumber = datediff(mm, dateadd(dd, dbo.ufn_GetDaysInMonth(a.new_opendate) -   16, a.new_opendate), f.new_submit_date) + 1
from FilteredAccount a 
    left outer join FilteredNew_Financials f on f.new_name = a.accountnumber
where f.new_monthnumber is null

这有用吗?