Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Subquery returned more than 1 value .... / 5 сообщений из 5, страница 1 из 1
27.11.2019, 11:34
    #39894943
yuri7811
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Subquery returned more than 1 value ....
Доброго дня.
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
27.11.2019, 11:44
    #39894953
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Subquery returned more than 1 value ....
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
27.11.2019, 11:46
    #39894956
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Subquery returned more than 1 value ....
yuri7811,

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

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

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

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


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