powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при удалении
9 сообщений из 9, страница 1 из 1
Ошибка при удалении
    #32014416
Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем! Вот какая беда.

Две таблицы связаны по составному ключу "один ко многим". В таблице "ко многим" есть записи с повторяющимися "ключевыми" значениями. При попытке удаления такой записи, выдаётся сообщение:"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."

Я для чистоты эксперимента создал поле счётчик. Задаю условие на выборку по счётчику - выдаёт одну строку, а когда даю запрос на удаление с тем же условием, опять это сообщение. Где он находит ещё записи - не понятно.

Что бы это значило. (Может это имеет значение - в таблице есть триггер, кот. при удалении изменяет главную таблицу (считает сумму по опр. полю).

Заранее благодарен.
...
Рейтинг: 0 / 0
Ошибка при удалении
    #32014418
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>повторяющимися "ключевыми" значениями
а это как?!

И код, пожалуйста - скрипт для таблиц и запрос на удаление. Проще будет выяснить.
...
Рейтинг: 0 / 0
Ошибка при удалении
    #32014423
Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"ключевые" - это так: зависимая таблица не ключёванная - а "ключевые" значения - это поля, соответствующие составному ключу в главной таблице. Но после того, как я создал счётчик, я его заключевал - результат тот же. (PKey и FKey остались те же)

Запрос такой - DELETE FROM ShippingOut WHERE Counter = '364'

Триггер -

CREATE TRIGGER trDelSO ON dbo.ShippingOut
FOR DELETE
AS
begin
update [Order]
set [Order].WLoaded = (select SUM(ShippingOut.Loading) from ShippingOut, deleted
where ShippingOut.NAcc = deleted.NAcc and ShippingOut.DAcc = deleted.DAcc and ShippingOut.NOrder = deleted.NOrder and ShippingOut.DOrder = deleted.DOrder)
from [Order], deleted
where [Order].NAcc = deleted.NAcc and [Order].DAcc = deleted.DAcc and [Order].NOrder = deleted.NOrder and [Order].DOrder = deleted.DOrder
end
...
Рейтинг: 0 / 0
Ошибка при удалении
    #32014425
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скрипт таблиц кинь. И желательно несколько инсертов к ним, на которых проявляется ошибка.
...
Рейтинг: 0 / 0
Ошибка при удалении
    #32014431
Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я наверное неправильно объяснил. Ошибка появляется при попытке удаления записи. А таблицы у меня создаются не скриптом, а в рукопашную (и связи тоже).

В таблице [Order] составной ключ - NAcc as varchar,DAcc as datetime,NOrder as varchar,DOrder as datetime.

В таблице [ShippingOut] те же самые поля, только ключ - Counter

FK_ShippingOut_Order

Связь по этим четырём полям. У таблицы [Order] - "один", у таблицы [ShippingOut] - "много".
...
Рейтинг: 0 / 0
Ошибка при удалении
    #32014445
Pandre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вместо таблицы Deleted используйте подзапрос вида

(select Distinct NAcc, DAcc, NOrder, DOrder from Deleted)

тогда должно быть нормально.
...
Рейтинг: 0 / 0
Ошибка при удалении
    #32014465
Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это в триггере в условии?
...
Рейтинг: 0 / 0
Ошибка при удалении
    #32014469
Pandre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В триггере

update [Order]
set [Order].WLoaded = (select SUM(ShippingOut.Loading) from ShippingOut, d
where ShippingOut.NAcc = d.NAcc and ShippingOut.DAcc = d.DAcc and ShippingOut.NOrder = deleted.NOrder and ShippingOut.DOrder = d.DOrder)
from [Order], (select Distinct NAcc, DAcc, NOrder, DOrder from Deleted) as d
where [Order].NAcc = d.NAcc and [Order].DAcc = d.DAcc and [Order].NOrder = d.NOrder and [Order].DOrder = d.DOrder
...
Рейтинг: 0 / 0
Ошибка при удалении
    #32014474
Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое. Похоже сделаю я эти триггеры. (Когда начал это дело крутить в QA он выдал ссылку на другой триггер. Сейчас полезу смотреть)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при удалении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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