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

Откуда: Гималай
Сообщений: 2101
Приветствую всех.
Пытаюсь написать CLR Trigger на VB.NET
Есть одна таблица, такой структуры и примерно с такими данными:
NewData
ID Data Status
1 'A' 0
2 'B' 0
3 'C' 2


Есть одна прога, которая периодически берет данные с различных устройств и записывает в данную таблицу.
При этом если Status записи равен 0, тогда необходимо обработать эти данные.
Обработка ведется в CLR Trigger на VB.NET, события AFTER INSERT и AFTER UPDATE.
Проблема в следующем, после завершения обработки CLR триггер должен изменить значение поля Status в 2, т.е. берутся данные
SELECT * FROM INSERTED WHERE Status=0
Затем каждая запись обрабатывается и обновляется в Status=2
Как можно сделать обновление поля Status в триггере?
16 июл 09, 13:20    [7423630]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Пытаюсь написать CLR Trigger на VB.NET


Задлянафига?! Что он делает такого, что не умеет T-SQL?
16 июл 09, 13:24    [7423670]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
pkarklin
автор
Пытаюсь написать CLR Trigger на VB.NET


Задлянафига?! Что он делает такого, что не умеет T-SQL?

Есть определенная обработка, которую можно было бы реализовать на T-SQL, но критична скорость оработки, и при этом логика обработки постоянно расширяется и дополняется.
До этого данная обработка была реализована во внешней программе, а сейчас пытаюсь это перекинуть на CLR, в целях увеличения скорости обработки и минимизации блокировок.
16 июл 09, 13:33    [7423730]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
orunbek
Есть определенная обработка, которую можно было бы реализовать на T-SQL, но критична скорость оработки, и при этом логика обработки постоянно расширяется и дополняется.
До этого данная обработка была реализована во внешней программе, а сейчас пытаюсь это перекинуть на CLR, в целях увеличения скорости обработки и минимизации блокировок.


Мдя... Если кто-то, кое-где, у нас порой... Что это за обработка такая секретная? Что она обрабатывает? Раз речь идет о блокировках, значит обрабатывает таки данные в бд? С чего Вы решили, что обработка на CLR будет быстрее, чем на родном транзакте?
16 июл 09, 13:36    [7423758]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
предыдущий пост, касающийся данной проблемы
16 июл 09, 13:39    [7423790]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
orunbek
предыдущий пост, касающийся данной проблемы
По-моему, и там Вам говорили, что CLR медленнее чистого T-SQL.
16 июл 09, 13:45    [7423844]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
orunbek
предыдущий пост, касающийся данной проблемы


Мдя...

автор
...
Из вышеизложенного, после внедрения .NET CLR уменьшиться наложение блокировок, и по идее улучшится скорость работы системы.


Вы заблуждаетесь.
16 июл 09, 13:46    [7423858]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
ну а вообще, хотя бы технически как можно решить данную проблему?
я проверю скорость обработки и отпишусь, на посредством CLR триггеров улучшилось или же наоброт ухидшилось скорость обработки
16 июл 09, 14:00    [7423980]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
orunbek
ну а вообще, хотя бы технически как можно решить данную проблему?


Какую проблему?! пока, кроме общих фраз, ничего не было сказано.
16 июл 09, 14:02    [7424000]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31200
orunbek
Как можно сделать обновление поля Status в триггере?
...
ну а вообще, хотя бы технически как можно решить данную проблему?
я проверю скорость обработки и отпишусь, на посредством CLR триггеров улучшилось или же наоброт ухидшилось скорость обработки
Решить легко.

Собственно, есть единственный способ - из CLR-кода выполнить команду UPDATE.

Разумеется, куча апдэйтов будет медленнее, чем один.

Разве что у вас там для записей в триггере расчёты делаются, типа конвертации фильмов MPEG2 -> H264
16 июл 09, 14:22    [7424163]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
alexeyvg
orunbek
Как можно сделать обновление поля Status в триггере?
...
ну а вообще, хотя бы технически как можно решить данную проблему?
я проверю скорость обработки и отпишусь, на посредством CLR триггеров улучшилось или же наоброт ухидшилось скорость обработки
Решить легко.

Собственно, есть единственный способ - из CLR-кода выполнить команду UPDATE.

Разумеется, куча апдэйтов будет медленнее, чем один.

Разве что у вас там для записей в триггере расчёты делаются, типа конвертации фильмов MPEG2 -> H264

скажем да, связанное с шифрацией и дешифрацией данных
а апдейт UPDATE INSERTED или UPDATE NewData?
16 июл 09, 14:25    [7424202]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
orunbek
скажем да, связанное с шифрацией и дешифрацией данных
Ну и зачем вам тогда CLR-триггер? Напишите скалярную CLR-функцию и юзайте её в обычном T-SQL триггере.

Сообщение было отредактировано: 16 июл 09, 14:34
16 июл 09, 14:28    [7424226]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
orunbek
связанное с шифрацией и дешифрацией данных


orunbek
а апдейт UPDATE INSERTED или UPDATE NewData?


SQL Server сам умеет шифровать и дешифровать. Что Вы там во внешней программе шифруете?! И... виртуальные таблицы inserted и deleted немодифицируемые.
16 июл 09, 14:29    [7424233]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31200
orunbek
а апдейт UPDATE INSERTED или UPDATE NewData?
UPDATE NewData

tpg
orunbek
скажем да, связанное с шифрацией и дешифрацией данных
Ну и зачем вам тогда CLR-триггер? Напишите скалярную CLR-функцию и юзайте её в обычном T-SQL триггере.
Да, стоит такой вариант обдумать
16 июл 09, 14:32    [7424256]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
Ох...ий программизд
Guest
orunbek
...апдейт UPDATE INSERTED...

INSERTED нельзя изменять
16 июл 09, 14:35    [7424282]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
pkarklin
orunbek
связанное с шифрацией и дешифрацией данных


orunbek
а апдейт UPDATE INSERTED или UPDATE NewData?


SQL Server сам умеет шифровать и дешифровать. Что Вы там во внешней программе шифруете?! И... виртуальные таблицы inserted и deleted немодифицируемые.


спасибо
здесь не только дешифрация и шифрация идет, описать всю работу системы, займет ооочень много времени и текста, грубо говоря на только T-SQL это медленно будет очень, или же в будущем уже невозможным, в силу того что постоянно добавляются различные условия, поэтому и во внешней проге все было реализовано
16 июл 09, 14:41    [7424324]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
alexeyvg
orunbek
а апдейт UPDATE INSERTED или UPDATE NewData?
UPDATE NewData

tpg
orunbek
скажем да, связанное с шифрацией и дешифрацией данных
Ну и зачем вам тогда CLR-триггер? Напишите скалярную CLR-функцию и юзайте её в обычном T-SQL триггере.
Да, стоит такой вариант обдумать


Данный CLR триггер висит на AFTER INSERT и AFTER UPDATE
Если я выполню UPDATE NewData в теле триггере, это вызовет рекурсивный вызор триггера, как этого можно избежать?
16 июл 09, 14:42    [7424331]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
orunbek
Если я выполню UPDATE NewData в теле триггере, это вызовет рекурсивный вызор триггера, как этого можно избежать?
Запретить в свойствах базы рекурсивный вызов триггеров.
16 июл 09, 14:45    [7424348]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
orunbek
Данный CLR триггер висит на AFTER INSERT и AFTER UPDATE
Если я выполню UPDATE NewData в теле триггере, это вызовет рекурсивный вызор триггера, как этого можно избежать?


Запретить рекурсию в свойствах бд с помошью ALTER DATABASE или проверять в триггере TRIGGER_NESTLEVEL

Сообщение было отредактировано: 16 июл 09, 14:48
16 июл 09, 14:47    [7424367]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
Ох...ий программизд
Guest
orunbek
Если я выполню UPDATE NewData в теле триггере, это вызовет рекурсивный вызор триггера, как этого можно избежать?

1) @@nestlevel
2) if update (column)
3) опция RECURSIVE_TRIGGERS
16 июл 09, 14:48    [7424374]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Всем спасибо, запретить именно по определенной таблице можно?
И @@nestedlevel в CLR триггере надо поискать...
16 июл 09, 14:50    [7424394]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
Ох...ий программизд
Guest
orunbek
И @@nestedlevel в CLR триггере надо поискать...

Решили все-таки CLR триггер делать...
16 июл 09, 14:52    [7424418]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
orunbek
Всем спасибо, запретить именно по определенной таблице можно?
И @@nestedlevel в CLR триггере надо поискать...


В определенной таблице нельзя. Проверяйте в триггере TRIGGER_NESTLEVEL. @@nestedlevel - это системная функция T-SQL для определения уровня вложенности в хп.
16 июл 09, 14:53    [7424423]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
pkarklin
orunbek
Всем спасибо, запретить именно по определенной таблице можно?
И @@nestedlevel в CLR триггере надо поискать...


В определенной таблице нельзя. Проверяйте в триггере TRIGGER_NESTLEVEL. @@nestedlevel - это системная функция T-SQL для определения уровня вложенности в хп.
1. @@NESTLEVEL
2. Триггер же тоже типа ХП. В нём тоже работает.
16 июл 09, 15:00    [7424476]     Ответить | Цитировать Сообщить модератору
 Re: CLR Trigger  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Ох...ий программизд
orunbek
И @@nestedlevel в CLR триггере надо поискать...

Решили все-таки CLR триггер делать...

ага ;-) если результаты не "обрадуют" перейду на T-SQL


pkarklin
orunbek
Всем спасибо, запретить именно по определенной таблице можно?
И @@nestedlevel в CLR триггере надо поискать...


В определенной таблице нельзя. Проверяйте в триггере TRIGGER_NESTLEVEL. @@nestedlevel - это системная функция T-SQL для определения уровня вложенности в хп.


iap
pkarklin
orunbek
Всем спасибо, запретить именно по определенной таблице можно?
И @@nestedlevel в CLR триггере надо поискать...


В определенной таблице нельзя. Проверяйте в триггере TRIGGER_NESTLEVEL. @@nestedlevel - это системная функция T-SQL для определения уровня вложенности в хп.
1. @@NESTLEVEL
2. Триггер же тоже типа ХП. В нём тоже работает.

Спасибо
16 июл 09, 16:04    [7425015]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить