powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Subquery returned more than 1 value ....
5 сообщений из 5, страница 1 из 1
Subquery returned more than 1 value ....
    #39894943
yuri7811
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня.
Microsoft SQL Server
Есть таблица:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE [dbo].[Mot_Station](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Mot_1] [int] NULL,
    [Mot_2] [int] NULL,
    [Mot_3] [int] NULL,
    [Mot_4] [int] NULL,
    [Mot_5] [int] NULL,
    [Mot_6] [int] NULL,
    [Mot_7] [int] NULL,
    [Mot_8] [int] NULL,
    [Mot_9] [int] NULL,
) ON [PRIMARY]


есть триггер :


Код: 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.
ALTER TRIGGER [dbo].[Tr_Delete_All_Exept_Last]
 --  make copy from kep_events to kep_events_day  
    ON [dbo].[Mot_Station]
    AFTER INSERT 
    AS
    BEGIN
set nocount on

 
DECLARE @M_1 INT = (SELECT top(1) [Mot_Station].[Mot_1] from [Mot_Station] order by id desc)
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = @M_1    WHERE [dbo].[Combo].[Mot] = 1;
 
DECLARE @M_2 INT = (SELECT top(1) [Mot_Station].[Mot_2] from [Mot_Station] order by id desc)
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = @M_2    WHERE [dbo].[Combo].[Mot] = 2;
 
DECLARE @M_3 INT = (SELECT top(1) [Mot_Station].[Mot_3] from [Mot_Station] order by id desc)
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = @M_3    WHERE [dbo].[Combo].[Mot] = 3;
 
DECLARE @M_4 INT = (SELECT top(1) [Mot_Station].[Mot_4] from [Mot_Station]order by id desc )
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = @M_4    WHERE [dbo].[Combo].[Mot] = 4;
 
DECLARE @M_5 INT = (SELECT top(1) [Mot_Station].[Mot_5] from [Mot_Station] order by id desc)
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = @M_5    WHERE [dbo].[Combo].[Mot] = 5;
 
DECLARE @M_6 INT = (SELECT top(1) [Mot_Station].[Mot_6] from [Mot_Station] order by id desc)
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = @M_6    WHERE [dbo].[Combo].[Mot] = 6;
 
DECLARE @M_7 INT = (SELECT top(1) [Mot_Station].[Mot_7] from [Mot_Station] order by id desc)
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = @M_7    WHERE [dbo].[Combo].[Mot] = 7;
 
DECLARE @M_8 INT = (SELECT top(1) [Mot_Station].[Mot_8] from [Mot_Station] order by id desc)
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = @M_8    WHERE [dbo].[Combo].[Mot] = 8;
 
DECLARE @M_9 INT = (SELECT top(1) [Mot_Station].[Mot_9] from [Mot_Station] order by id desc)
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = @M_9    WHERE [dbo].[Combo].[Mot] = 9;
 
 
 
DELETE FROM Mot_Station
 
 
END


Иногда срабатывание триггера выскакивает ошибку:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Выловил блок который вызывает ошибку (он все время разный) :

Код: sql
1.
2.
DECLARE @M_3 INT = (SELECT top(1) [Mot_Station].[Mot_3] from [Mot_Station] order by id desc)
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = @M_3    WHERE [dbo].[Combo].[Mot] = 3;


запустил:

Код: sql
1.
2.
DECLARE @M_3 INT = (SELECT top(1) [Mot_Station].[Mot_3] from [Mot_Station] order by id desc)
SELECT @M_3


получил: 32

запустил:

Код: sql
1.
UPDATE [dbo].[Combo] SET [dbo].[Combo].[Station] = 32    WHERE [dbo].[Combo].[Mot] = 3;


тоже сработало. а целиком блок выдает ошибку. Подскажите что не так.
...
Рейтинг: 0 / 0
Subquery returned more than 1 value ....
    #39894953
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Показанный код такую ошибку генерить не может.
2. Все это переписывается через один update:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
update c
 set
  Station = s.Value
from
 (select top (1) Mot1, Mot2, Mot3, Mot4, Mot5, Mot6, Mot7, Mot8, Mot9 from dbo.Mot__Station order by id desc) ms cross apply
 (
  values
   (1, ms.Mot1), (3, ms.Mot3), (3, ms.Mot3), (4, ms.Mot4), (5, ms.Mot5), (6, ms.Mot6), (7, ms.Mot7), (8, ms.Mot8), (9, ms.Mot9) 
 ) s(Mot, Value) join
 dbo.Combo c on c.Mot = s.Mot;
...
Рейтинг: 0 / 0
Subquery returned more than 1 value ....
    #39894956
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yuri7811,

триггер на Combo скорее всего такой же дикий
...
Рейтинг: 0 / 0
Subquery returned more than 1 value ....
    #39894961
yuri7811
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, попробую разобраться.
...
Рейтинг: 0 / 0
Subquery returned more than 1 value ....
    #39895101
yuri7811
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Всем огромное за помощь,

действительно на [dbo].[Combo] есть триггер который отслеживает число 32.

Отключил его и все заработало.

Сейчас попробую оптимизировать код триггера.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Subquery returned more than 1 value ....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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