Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Оптимизация триггера  [new]
nnmserg11
Member

Откуда: Р.Ф.
Сообщений: 86
Доброго дня, SQL-профи))
Написал триггер, но хотел бы проконсультироваться у опытных и знающих, можно ли как-то оптимизировать его или уменьшить код (возможно не стоит каждый раз объявлять таблицы).

Тело триггера собственно:

if exists (select * from inserted where new_product_ductforrequest is not null)
begin
update table1
set table1.new_name=table2.name+' '+table3.scala_description2
from new_productforrequestextensionbase as table1
join productbase as table2 on table1.new_product_ductforrequest=table2.productid
join productextensionbase as table3 on table2.productid=table3.productid
join inserted i on i.new_productforrequestid = table1.new_productforrequestid
where table1.new_product_ductforrequest is not null

update table1
set table1.new_uomproductforrequest=table2.defaultuomid
from new_productforrequestextensionbase as table1
join productbase as table2 on table1.new_product_ductforrequest=table2.productid
join inserted i on i.new_productforrequestid = table1.new_productforrequestid
where table1.new_product_ductforrequest is not null

update table1
set table1.new_hotline_number=table2.productnumber
from new_productforrequestextensionbase as table1
join productbase as table2 on table1.new_product_ductforrequest=table2.productid
join inserted i on i.new_productforrequestid = table1.new_productforrequestid
where table1.new_product_ductforrequest is not null

update table1
set table1.new_supplier_number=table3.new_supplier_stock_code
from new_productforrequestextensionbase as table1
join productbase as table2 on table1.new_product_ductforrequest=table2.productid
join productextensionbase as table3 on table2.productid=table3.productid
join inserted i on i.new_productforrequestid = table1.new_productforrequestid
where table1.new_product_ductforrequest is not null
end

Прошу отвечать только по существу)) (вопросы о длинных названиях - не ко мне, до меня постарались)
24 апр 12, 14:39    [12463149]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Если откроете документацию, то увидите, что в предложении set инструкции update можно указывать более одного столбца.
24 апр 12, 14:48    [12463221]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация триггера  [new]
nnmserg11
Member

Откуда: Р.Ф.
Сообщений: 86
invm
Если откроете документацию, то увидите, что в предложении set инструкции update можно указывать более одного столбца.


Проверил, сработало:

if exists (select * from inserted where new_product_ductforrequest is not null)
begin
update table1
set table1.new_name=table2.name+' '+table3.scala_description2, --объединение 2 полей в название
table1.new_uomproductforrequest=table2.defaultuomid, --единица измерения
table1.new_hotline_number=table2.productnumber, --код горячей линии
table1.new_supplier_number=table3.new_supplier_stock_code --код запаса поставщика
from new_productforrequestextensionbase as table1
join productbase as table2 on table1.new_product_ductforrequest=table2.productid
join productextensionbase as table3 on table2.productid=table3.productid
join inserted i on i.new_productforrequestid = table1.new_productforrequestid
where table1.new_product_ductforrequest is not null
end
24 апр 12, 15:07    [12463380]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация триггера  [new]
nnmserg11
Member

Откуда: Р.Ф.
Сообщений: 86
invm,

Спасибо))
24 апр 12, 15:07    [12463388]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация триггера  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
nnmserg11,да и
if exists (select * from inserted where new_product_ductforrequest is not null)
не нужно при таком соединении
join inserted i on i.new_productforrequestid = table1.new_productforrequestid
24 апр 12, 15:10    [12463410]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация триггера  [new]
nnmserg11
Member

Откуда: Р.Ф.
Сообщений: 86
denis2710,

Убрал. Работает. Спасибо за подсказку))
24 апр 12, 15:19    [12463467]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация триггера  [new]
Vasilev Andrey
Member

Откуда:
Сообщений: 9
nnmserg11,
Если в таблице productextensionbase отсутствуют какие-нибудь записи соответствующие таблице new_productforrequestextensionbase по условию productextensionbase.productid=new_productforrequestextensionbase.new_product_ductforrequest, то результат вашего последнего update будет отличаться от исходных четырех update' ов
24 апр 12, 15:32    [12463584]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация триггера  [new]
nnmserg11
Member

Откуда: Р.Ф.
Сообщений: 86
Vasilev Andrey,

Потестировал - вроде также срабатывает, НО .. (( Если в table2.scala_description2 нет данных - то не подтянется новое поле table1.new_name, получаемое слиянием двух других полей.

Не подскажите, куда мне прописать теперь ограничение IS SON NULL?
25 апр 12, 14:58    [12469451]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить