powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный запрос вернул больше одного значения
12 сообщений из 12, страница 1 из 1
Вложенный запрос вернул больше одного значения
    #39802712
rage_karcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выполнение данной инструкции было прервано. ОшибкаВложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.

Проблема в том, что данный запрос раньше выдавал больше одного значения и прекрасно выполнялся, что сейчас могло пойти не так?
Сама хранимая процедура
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[CalcNach_FLS]
@LS numeric(19,0)
AS


DECLARE @House dec(19,0)

select @House=House
from PROD..tabPK 
where LS=@LS 

DELETE PROD..tabNachP where LS=@LS 

if object_id('tempdb..##DomNah') is not null begin drop table ##DomNah end


DECLARE Dom CURSOR FOR select HouseID from adr_tabHouse 
where HouseID = @House and Enable = 1
		
OPEN Dom

FETCH NEXT FROM Dom INTO @House
WHILE @@FETCH_STATUS = 0
BEGIN   
   exec NahDom @House
   insert into tabNachP(Code,House,LS,FLS,Flat,Room,Area,T,Usl,GM,P,Dat0,Dat1,Nah,PGF,INN)
   select NewID(),@House,LS,FLS,Flat,Isnull(Room,''),Area,T,Usl,GM,P,Dat0,Dat1,round(cast(Nah as money),2),PGF,INN
   from ##DomNah
   where LS = @LS
   drop table ##DomNah
   FETCH NEXT FROM Dom INTO @House
END

CLOSE Dom
DEALLOCATE Dom


---/////////////////////////////////////////////////////////////////////////////////
declare @GM int = (select top 1 GM from tabPeriod where (D is NULL) order by GM desc)
select ls,FLS,
(select Sum(SumP) from CalcStop where GM is null and LS = a.LS) as Sum0,
(select Sum(SumP) from CalcStop where GM = @GM and LS = a.LS) as SumN,
Sum(SumP) as Sum1 into #Calc
from CalcStop a
where Isnull(GM,0)<@GM and LS = @LS
group by LS,FLS

select LS,
case when Sum1>0 then case when Sum1>=Abs(SumN) then SumN else -Sum1 end else 0 end as Nah
into #Result
from #Calc

INSERT INTO [dbo].[tabNachP]([code],[House],[LS],[FLS],[Flat],[Room],[Area],[T],[Usl],[GM],[P],[Dat0],[Dat1],[Nah],[PGF],[INN])
select NewID(),[House],[LS],[FLS],[Flat],[Room],[Area],[T],3,[GM],[P],[Dat0],[Dat1],
(select SumP from CalcStop where ls = N.ls and  GM = N.GM),
--(select Nah from #Result where ls = N.ls and  Nah <> 0),
[PGF],[INN]
from [tabNachP] N
where Usl = 1 and ls in (select ls from #Result where Nah <> 0) and gm >= 213 

drop table #Calc,#Result


exec PROD..CalcPeni_FLS @LS 
exec PROD..CreateKvitEPD_FLS @LS

...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39802715
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы уже выяснили, какой именно запрос?
...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39802716
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rage_karcher,

скорее это

Код: sql
1.
(select SumP from CalcStop where ls = N.ls and  GM = N.GM)
...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39802718
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема тут

Код: sql
1.
(select SumP from CalcStop where ls = N.ls and  GM = N.GM)



В таблице CalcStop есть записи с одинаковыми ls и GM


Найти их довольно просто
Код: sql
1.
select ls, gm, count(*) from CalcStop group by ls, having count(*) > 1




что с ними делать, вопрос уже к вам и логике работы процедуры
...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39802815
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это не ошибка, то выбирайте первый попавшийся SELECT TOP (1), если ошибка, то создайте ограничение уникальности в CalcStop .
...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39802817
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовЕсли это не ошибка, то выбирайте первый попавшийся SELECT TOP (1), если ошибка, то создайте ограничение уникальности в CalcStop .

выше у него по тем же условиям в подзапросе выбирается sum()
...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39802831
rage_karcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLexПроблема тут

Код: sql
1.
(select SumP from CalcStop where ls = N.ls and  GM = N.GM)



В таблице CalcStop есть записи с одинаковыми ls и GM


Найти их довольно просто
Код: sql
1.
select ls, gm, count(*) from CalcStop group by ls, gm having count(*) > 1




что с ними делать, вопрос уже к вам и логике работы процедуры

Запрос ничего не выдал.

P.s.: Мне следовало сразу упомянуть, что программа работает из нескольких компонентов баз данных (FKRMO, IMG, PROD, WEBDB). При замене FKRMO на версию более раннего периода, то операция нормально выполняется, но насколько я понял в ней хранятся только ЕПД, сформированные этой операцией
...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39802837
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rage_karcherЗапрос ничего не выдал.

Если проблема именно в приведенном вами коде, то ошибка может быть только по указанной мною причине. Сейчас дублей в таблице CalcStop нет, значит они появляются где-то перед выполнение указанного кода.





rage_karcher P.s.: Мне следовало сразу упомянуть, что программа работает из нескольких компонентов баз данных (FKRMO, IMG, PROD, WEBDB). При замене FKRMO на версию более раннего периода, то операция нормально выполняется, но насколько я понял в ней хранятся только ЕПД, сформированные этой операцией
сомневаюсь, что эта информация как то поможет пролить свет на источник проблем
...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39802848
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rage_karcherПроблема в том, что данный запрос раньше выдавал больше одного значения и прекрасно выполнялся, что сейчас могло пойти не так?Нет, сервер всегда выдаёт ошибку, если в таком подзапросе возвращается более одной записи.

Нужно разбираться не с версиями и данными, а править багу. Не надо её оставлять.

Когда программист пишет подзапрос (select SumP from CalcStop where ls = N.ls and GM = N.GM), он должен убедиться, что в данные технически невозможно вставить что то, что позволит вернуть более одного значения.
Это делается либо ограничениями (уникальный констрейн на ls и GM), либо агрегатной функцией.
...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39805504
rage_karcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
товарищ msLex и все, кто пытался помочь, спасибо. Нашел косяк. В прошлом периоде произошел баг и вывел в таблице вместо 26055 строк, 78162 строки, то есть ровно втрое больше. В каждой паре все строки идентичные, кроме уникального ключа. А как можно удалить задвоения? Нашел на сайте техподдержки майкрософт, что можно копировать в отдельную таблицу, убрать задвоенные данные и вернуть, но не получается правильно составить запрос, чтобы вставить данные обратно
https://support.microsoft.com/ru-ru/help/139444/how-to-remove-duplicate-rows-from-a-table-in-sql-server
...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39805510
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rage_karcher,

Код: sql
1.
select distinct ... from
...
Рейтинг: 0 / 0
Вложенный запрос вернул больше одного значения
    #39805517
rage_karcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StarikNavy,

Да я уже написал его, просто когда скопировал в отдельную таблицу и удалил задвоения из исходной, начал тупить с запросом insert. Догнал только когда начал выходить из офиса, сейчас поправил, вроде все норм стало
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный запрос вернул больше одного значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]