2011-02-06 68 views
-1

完整的错误消息是这一个:子查询返回多个值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。我能找到的所有东西都只是说“是的,只要使用TOP 1就可以了”,只是我没有一个子查询或一个选择语句。SSMS错误:子查询返回了多个值...但没有子查询

这里的查询:

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是一个用户定义的函数,分析传递给它的日期,不查询数据库中的所有,在任何情况下,我已经证实,它不通过在没有它的情况下运行查询导致错误的原因。

有人知道这里发生了什么?

+0

嗨,如果你完全删除在赋值右边的嵌套的datediff它工作正确吗? – 2011-02-06 23:31:57

+0

刚刚尝试过,实际上没有。 – extarbags 2011-02-06 23:37:44

+0

但是,如果您删除整个datediff和联接,并且只能在桌面上运行,它应该正常工作?对于我记得SQL 2005仍然不喜欢用这种结构更新命令,而SQL 2008没有问题。 – 2011-02-06 23:43:06

回答

0

我会稍微differenty书面查询:

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 

运作的?

1

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