Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вычисляемые поля / 3 сообщений из 3, страница 1 из 1
10.07.2001, 13:19
    #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
10.07.2001, 14:11
    #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
11.07.2001, 05:53
    #32009292
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисляемые поля
Уважаемый Andrew!

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

PS

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


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