powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вычисляемые поля
3 сообщений из 3, страница 1 из 1
Вычисляемые поля
    #32009258
Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Подскажите пожалуйста, можно ли в MSSQL через триггеры(в первую очередь for insert) организовать вычисление некоторых полей?

Пример:

ALTER TRIGGER ti_coming_detail ON coming_detail FOR INSERT AS
BEGIN
DECLARE @id INT, @new_price, @new_quantity
DECLARE cur CURSOR FORWARD_ONLY STATIC READ_ONLY FOR
SELECT i.id, i.price AS @new_price, i.quantity AS new_quantity
FROM inserted i
OPEN cur
FETCH NEXT FROM cd_insert_cur INTO @id, @new_card_id, @new_quantity
WHILE (@@FETCH_STATUS = 0) BEGIN
-- естественно этот код не работает
UPDATE coming_detail
SET coming_sum = @new_price * @new_quantity
WHERE id = @id
-- естественно этот код не работает
FETCH NEXT FROM cur INTO @id, @new_price, @new_quantity
END
CLOSE cur
DEALLOCATE cur
END

Смысл всей затеи простой. Например это может называться денормализацией.
Насколько я знаю в Oracle триггерами уровня строки это делается за 10 сек.

С уважением, Андрей
...
Рейтинг: 0 / 0
Вычисляемые поля
    #32009265
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В SQL2000 можно сразу в таблице создать вычисляемое поле

CREATE TABLE coming_detail (id , price, quantity, coming_summa AS price * quantity)

и не надо никаких тригеров


PS

Как бы между прочим - а зачем вы используете в тригерке курсор. IMHO так было бы лучше

ALTER TRIGGER ti_coming_detail ON coming_detail FOR INSERT AS
BEGIN
UPDATE coming_detail SET coming_sum = i.price * i.quantity
FROM inserted i INNER JOIN coming_detail c ON c.id = i.id
END
...
Рейтинг: 0 / 0
Вычисляемые поля
    #32009292
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Andrew!

Я присоединяюсь к ответу Glory и хотел бы на будующее попросить.
Я никогда не работал с Oracle. Может быть в нем на порядок больше возможностей. Ну если Вы уж пишите "знаю в Oracle триггерами уровня строки это делается за 10 сек" - хотя бы приведите пример! Мне это например интересно будет, наверное и не только мне.
Ну достало уже, не первый раз вижу - "а вот в Oracle есть то, есть сё, а это вообще делается само", и хоть бы кто показал чего!

PS

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


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