Ошибка SSMS: подзапрос возвратил более 1 значения ... но подзапроса нет - PullRequest
0 голосов
/ 07 февраля 2011

Это полное сообщение об ошибке: Подзапрос возвратил более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения. Все, что я могу найти на нем, просто говорит «да, просто используйте TOP 1, и все будет хорошо», только у меня даже нет подзапроса или оператора select.

Вот запрос:

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 ]

1 голос
/ 07 февраля 2011

Учитывая, что для написания этого запроса я бы поменял местами таблицы и использовал бы внутреннее объединение, чтобы в выражениях «UPDATE» и «FROM» было указано «FilteredNew_Financials», между двумя таблицами на 1 условие соединения ... может быть, у вас есть грязные данные в таблицах? Вы уверены, что «new_name» и «accountnumber» являются первичными и внешними ключами (по крайней мере, логически, если не структурно)?

0 голосов
/ 07 февраля 2011

Я бы написал запрос немного иначе:

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

Это работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...