2011-02-06 18 views
-1

完全なエラーメッセージは次のとおりです。サブクエリは2つ以上の値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。私が見つけることができるすべてのことはちょうど "ええ、TOP 1を使用して、それはうまくいく"と言います。私はサブクエリまたはselect文も持っていません。ここでSSMSエラー:サブクエリは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がそれに渡された日付を解析して、全くデータベースを照会しないユーザ定義関数であり、いずれにしても、私はそれがないことを確認しましたそれなしでクエリを実行することによってエラーの原因。

誰でも、ここで何が起こっているのか知っていますか?私は少しdifferentyクエリを書いているだろう

+0

こんにちは、割り当ての右側に完全にネストされたdatediffを削除すると正しく動作しますか? –

+0

ちょうど試しましたが、実際には試していません。 – extarbags

+0

しかし、あなたは全体のdatediffと結合を削除し、あなたはテーブルfの上で動作する場合は正しく動作するはずですか?私は覚えていることは、SQL 2005はまだSQL 2008は問題ありませんが、そのような構造の更新コマンドが好きではないことを覚えています。 –

答えて

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 

は、その仕事をしていますか?

+0

:(同じエラー。 – extarbags

+0

FilteredNew_Financialsにプライマリキーがありますか? –

+0

はい、役立つなら、これはMSCRMデータベースです – extarbags

1

このクエリを書くためには、UPDATE句とFROM句の両方で "FilteredNew_Financials"を持つために、テーブルをスワップして内部結合を使用していたと仮定すると、2つのテーブルの間に1対nのカーディナリティがあります。ジョイン条件で...多分あなたはテーブルに汚いデータを持っていますか? "new_name"と "accountnumber"はプライマリキーと外部キーです(少なくとも論理的には構造的でない場合)?

+0

推測すると、UPDATEを駆動するクエリが同じ行を複数回更新しようとするとエラーがスローされます。私はUPDATEの実装を推測しています...サブクエリ機械のいくつかを再利用しています – araqnid

+0

ええ、それは私が意味していました;) – BertuPG

+0

@araqnid - それはすでに私の答えのポイント3でカバーされていました。 OPは、これはエラーを起こさないと述べた。 OPが実行計画を漏らさない限り、私は決して知らないだろう。 –

関連する問題