Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 триггер не дает работать инсерту  [new]
@_Guest
Guest
есть триггер AFTER INSERT,UPDATE на таблицу Produkt
и при попытки сделать
insert into Produkt (PID,Number,Name,Binary) select ID,Number,Name,Binary from Produkt where PID=2656
выдается следующая ошибка:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
что делать?
25 авг 09, 18:09    [7579018]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
Glory
Member

Откуда:
Сообщений: 104760
@_Guest

что делать?

Переписывать триггер
25 авг 09, 18:10    [7579026]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
@_Guest
Guest
Glory,
это понятно, а на что обратить внимание в этом случае, в сторону какого условия думать?
25 авг 09, 18:11    [7579037]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
Glory
Member

Откуда:
Сообщений: 104760
@_Guest
Glory,
это понятно, а на что обратить внимание в этом случае, в сторону какого условия думать?

В сторону Subquery, который returned more than 1 value.
25 авг 09, 18:13    [7579043]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
@_Guest
Glory,
это понятно, а на что обратить внимание в этом случае, в сторону какого условия думать?


в сторону того, что DML операторы могут обрабатывать от 0 до .... записей, а не только одну.
25 авг 09, 18:14    [7579044]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
весь код триггера покажите ?
-------------------------------------
Jedem Das Seine
25 авг 09, 18:14    [7579046]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
@_Guest
Guest
триггер совсем простенький, я не знаю как в нем учесть что операторы могут обрабатывать более одной записи.

CREATE TRIGGER [dbo].[ChangeDate]
ON [dbo].[Produkt]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;

IF UPDATE(Binary)
UPDATE Produkt
SET ChangedDate = GetDate()
WHERE PID = (SELECT PID FROM inserted) AND Number = (SELECT Number FROM inserted)

END
GO
26 авг 09, 12:06    [7581098]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
@_Guest
триггер совсем простенький, я не знаю как в нем учесть что операторы могут обрабатывать более одной записи.

CREATE TRIGGER [dbo].[ChangeDate]
ON [dbo].[Produkt]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;

IF UPDATE(Binary)
UPDATE Produkt
SET ChangedDate = GetDate()
WHERE PID = (SELECT PID FROM inserted) AND Number = (SELECT Number FROM inserted)

END
GO

Вот этот: SELECT PID FROM inserted
И вот этот: SELECT Number FROM inserted
26 авг 09, 12:09    [7581110]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
расскажите, пожалуйста, своими словами,
каково предназначение этого триггера и почему без него нельзя?

ато в нем комментариев почему-то нету...
26 авг 09, 12:10    [7581120]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
@_Guest
Guest
Гавриленко Сергей Алексеевич
@_Guest
триггер совсем простенький, я не знаю как в нем учесть что операторы могут обрабатывать более одной записи.

CREATE TRIGGER [dbo].[ChangeDate]
ON [dbo].[Produkt]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;

IF UPDATE(Binary)
UPDATE Produkt
SET ChangedDate = GetDate()
WHERE PID = (SELECT PID FROM inserted) AND Number = (SELECT Number FROM inserted)

END
GO

Вот этот: SELECT PID FROM inserted
И вот этот: SELECT Number FROM inserted

???
26 авг 09, 12:14    [7581139]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
Glory
Member

Откуда:
Сообщений: 104760
@_Guest
Гавриленко Сергей Алексеевич
@_Guest
триггер совсем простенький, я не знаю как в нем учесть что операторы могут обрабатывать более одной записи.

CREATE TRIGGER [dbo].[ChangeDate]
ON [dbo].[Produkt]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;

IF UPDATE(Binary)
UPDATE Produkt
SET ChangedDate = GetDate()
WHERE PID = (SELECT PID FROM inserted) AND Number = (SELECT Number FROM inserted)

END
GO

Вот этот: SELECT PID FROM inserted
И вот этот: SELECT Number FROM inserted

???

Это и есть Subquery которые returned more than 1 value
26 авг 09, 12:15    [7581149]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
@_Guest
Guest
Паганель
расскажите, пожалуйста, своими словами,
каково предназначение этого триггера и почему без него нельзя?

ато в нем комментариев почему-то нету...


нужно понять когда произошло изменение поля Binary, эта картинка.
26 авг 09, 12:15    [7581150]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
@_Guest
Гавриленко Сергей Алексеевич
@_Guest
триггер совсем простенький, я не знаю как в нем учесть что операторы могут обрабатывать более одной записи.

CREATE TRIGGER [dbo].[ChangeDate]
ON [dbo].[Produkt]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;

IF UPDATE(Binary)
UPDATE Produkt
SET ChangedDate = GetDate()
WHERE PID = (SELECT PID FROM inserted) AND Number = (SELECT Number FROM inserted)

END
GO

Вот этот: SELECT PID FROM inserted
И вот этот: SELECT Number FROM inserted

???
Что "???"? Переписывайте ваши = на join'ы.
26 авг 09, 12:15    [7581155]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
@_Guest
Guest
Glory
@_Guest
Гавриленко Сергей Алексеевич
@_Guest
триггер совсем простенький, я не знаю как в нем учесть что операторы могут обрабатывать более одной записи.

CREATE TRIGGER [dbo].[ChangeDate]
ON [dbo].[Produkt]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;

IF UPDATE(Binary)
UPDATE Produkt
SET ChangedDate = GetDate()
WHERE PID = (SELECT PID FROM inserted) AND Number = (SELECT Number FROM inserted)

END
GO

Вот этот: SELECT PID FROM inserted
И вот этот: SELECT Number FROM inserted

???

Это и есть Subquery которые returned more than 1 value


нет
Subquery вот:
insert into Produkt (PID,Number,Name,'новое значение бинари кот возвращает программа') select PID,Number,Name,Binary from Produkt where PID=2656

а PID (так уж сложилось) не уникальный, и по нему возвращается 2 записи, вот и возникает такая ситуация.
26 авг 09, 12:18    [7581178]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
@_Guest
нужно понять когда произошло изменение поля Binary, эта картинка.
Вы ведь меняете это поле посредством соответствующих хранимок?
Почему бы не добавить функциональность обновления ChangedDate в них же?
Зачем триггер?
26 авг 09, 12:19    [7581184]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
Glory
Member

Откуда:
Сообщений: 104760
@_Guest

нет
Subquery вот:
insert into Produkt (PID,Number,Name,'новое значение бинари кот возвращает программа') select PID,Number,Name,Binary from Produkt where PID=2656

а PID (так уж сложилось) не уникальный, и по нему возвращается 2 записи, вот и возникает такая ситуация.

Вы заблуждаетесь.
Ваш триггер неправильный. И проблема именно в подзапросах SELECT PID FROM inserted) и (SELECT Number FROM inserted)
26 авг 09, 12:20    [7581196]     Ответить | Цитировать Сообщить модератору
 Re: триггер не дает работать инсерту  [new]
@_Guest
Guest
Glory
@_Guest

нет
Subquery вот:
insert into Produkt (PID,Number,Name,'новое значение бинари кот возвращает программа') select PID,Number,Name,Binary from Produkt where PID=2656

а PID (так уж сложилось) не уникальный, и по нему возвращается 2 записи, вот и возникает такая ситуация.

Вы заблуждаетесь.
Ваш триггер неправильный. И проблема именно в подзапросах SELECT PID FROM inserted) и (SELECT Number FROM inserted)


спасибо
26 авг 09, 12:22    [7581218]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить