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

Откуда: Kiev
Сообщений: 6801
ptr128
invm
Состав транзакции определяется бизнес-требованиями

Давно так не ржал. Еще и коллег повеселил )))
Бизнес-требование, если это, конечно, не заказной тендер, не то что состав транзакции не ограничивает, а даже платформу и программный продукт. Клиенту важен результат, а как его разработчик добился - его интересует исключительно только с той точки зрения, за сколько часов разработчика ему акт выставили.

имхо, тут больше бизнес-правила, но вы можете ржать и дальше
26 дек 17, 13:26    [21062999]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
invm
Member

Откуда: Москва
Сообщений: 9343
ptr128
Давно так не ржал. Еще и коллег повеселил )))
Веселитесь дальше.
Еще веселее станет, когда в результате ваших приседаний товар будет списан только с части документа :)
26 дек 17, 13:27    [21063005]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
invm
Member

Откуда: Москва
Сообщений: 9343
ptr128
Предложите свое "грамотное" решение. Или только флудить в состоянии?
Читайте внимательнее - решение было предложено.
26 дек 17, 13:29    [21063016]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
TaPaK
индексы создавать можно на твой афигенный аргумент?
CREATE NONCLUSTERED INDEX IxTemp ON TEST_Q (THREAD,ID)

Можно. И в этом случае, вместо произвольного порядка будет строго определенный.
Я же приводил пример именно для произвольного порядка обновления записей, поэтому данный вариант мне не интересен.
Потому что добиться этого можно только в частном случае, да еще и не всегда, а для конкретного плана (планов) запросов. Которые обладают особенностью меняться по мере эксплуатации БД.

TaPaK
дедлоки будут

У чайников - да. У профессионалов - нет.
26 дек 17, 13:32    [21063027]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
invm
ptr128
Давно так не ржал. Еще и коллег повеселил )))
Веселитесь дальше.
Еще веселее станет, когда в результате ваших приседаний товар будет списан только с части документа :)

Опять детские абстрактные страхи? )))
Или Вы читать не умеете?
Как можно списать товар по результатам отчета?
Как может оказаться списана только часть товара при двухшаговом резервировании-списании по одной строке в транзакции?
26 дек 17, 13:34    [21063042]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
invm
ptr128
Предложите свое "грамотное" решение. Или только флудить в состоянии?
Читайте внимательнее - решение было предложено.

В упор не вижу. От Вас вижу только детские страхи и флуд. Решения - ни одного.
26 дек 17, 13:36    [21063046]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ptr128
TaPaK
индексы создавать можно на твой афигенный аргумент?
CREATE NONCLUSTERED INDEX IxTemp ON TEST_Q (THREAD,ID)

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

ан нет, рыбка больна более серьёзно
26 дек 17, 13:39    [21063059]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
TaPaK
ptr128
пропущено...

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

ан нет, рыбка больна более серьёзно

Детка здесь обсуждается утверждение, что если
ptr128
обновлять несколько записей одной таблицы в произвольном порядке в пределах одной транзакции, [это] гарантированно будет приводить к дидлокам.


А если Вы хотите обсудить, всегда ли можно обновлять таблицы в строго определенном порядке, то это совсем другой вопрос. Попробуйте, например, это сделать для случая когда:
1. Используются альтернативные товарные единицы и нужно подменять код товарной единицы на код альтернативной, если по указанной количества не достаточно
2. Используется учет по партиям и нужно подбирать партии товара, да еще и с учетом срока годности.
3. Необходимо сразу рассчитывать себестоимость по LIFO/FIFO
4. Необходимо подбирать склады и места хранения для оптимальной логистики.
Ну просто постинг обычного BOM )))
26 дек 17, 13:52    [21063123]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
Jaffar
Member

Откуда:
Сообщений: 633
TaPaK,
Да это единственный вариант и другого нет.

предложите другой вариант - коротко и ясно.
26 дек 17, 13:58    [21063153]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Jaffar
TaPaK,
Да это единственный вариант и другого нет.

предложите другой вариант - коротко и ясно.

это вы про это

автор
триггеры рулят потому что только они гарантируют логическую связь данных.

то я вам скажу что триггеры нихрена не гарантируют
26 дек 17, 14:00    [21063164]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
Jaffar
Member

Откуда:
Сообщений: 633
ptr128
Jaffar
ВСе это чушь.

Ну Вы достаточно ёмко и самокритично озаглавили свой пост.
Но я все же разберу его

Jaffar
Есть историческая таблица с остатками типа:
(IDTowar, Date, Count, SUM)

и таблица с документами типа
IDDOC
TypeDoc,
DTDOC
DeltaCount,
Price
Sum,
и т.п.

Документы меняют состояние исторической таблицы с остатками - все остальное ерунда.

Во-первых, начнем с того, что есть не таблица с документами, а, как минимум, две таблицы - заголовок документа и его строки.
Во-вторых, просто обновить агрегированные количества одним запросом нельзя, так попытка
ptr128
обновлять несколько записей одной таблицы в произвольном порядке в пределах одной транзакции, [...] гарантированно будет приводить к дидлокам

Что доказано тут 21061621

ptr128
более правильные подходы, с двух шаговой обработкой (резервирование по всем строкам, если успешно - то списание)

подразумевают, следующий механизм.
1. В каждой строке документа у нас есть флаг, который мы выставляем в 1 в случае успешного резервирования. В заголовке документа имеем так же флаг проведения всего документа или, что чаще встречается, факт проведения отражается совсем в другой таблице.
2. В таблице агрегатов имеем не только актуальный остаток, но еще и зарезервированное количество. Доступное количество рассчитывается как их разность.
3. По каждой строке документа отдельной транзакцией выполняется резервирование (увеличение зарезервированного количества) с проверкой того, хватает ли для этого доступного количества. В той же транзакции в строке устанавливается флаг резервирования.
4. Если резервирование всех строк прошло успешно, то есть доступного количества хватило для всех позиций в документе, мы опять, по каждой строке документа отдельной транзакцией выполняем уменьшение актуального количества, зарезервированного количества и сбрасываем флаг резервирования в строке.
5. Если резервирование хотя бы для одной строки не удалось, то мы снова, по каждой строке документа, в которой установлен флаг резервирования, отдельной транзакцией, уменьшаем зарезервированное количество и сбрасываем флаг резервирования.
6. Механизм логической транзакции и средства восстановления после сбоя я тут опускаю, хотя их реализация обязательна.



кэп, никто из местных в здравом уме не будут отвечать новичку на риторический вопрос километрами самописного текста и с точностью теоремы описывать все ньюансы.
ему дадут направление - для человека которому ЭТО надо - этого будет достаточно, для остальных студентов, которые пишут курсовую даже километры "самописи" не помогут.

Поэтому все что вы тут написали -это хорошо и правильно и с этим я не спорю, даже не читая(уж простите), ибо....

Поэтому обвинять меня в том что я не пишу "километры" - глупо.
26 дек 17, 14:04    [21063179]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
Jaffar
Member

Откуда:
Сообщений: 633
TaPaK
Jaffar
TaPaK,
Да это единственный вариант и другого нет.

предложите другой вариант - коротко и ясно.

это вы про это

автор
триггеры рулят потому что только они гарантируют логическую связь данных.

то я вам скажу что триггеры нихрена не гарантируют



будете рассказывать про восстановление после сбоев?
26 дек 17, 14:06    [21063185]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
Jaffar
кэп, никто из местных в здравом уме не будут отвечать новичку на риторический вопрос километрами самописного текста и с точностью теоремы описывать все ньюансы.

Но почему то эти "местные" с упорством баранов требуют это от меня )))

Jaffar
Поэтому обвинять меня в том что я не пишу "километры" - глупо.

Приношу извинения, если обидел. Значит был не прав. Обвинять ни в чем не хотел и это действительно глупо.
26 дек 17, 14:07    [21063192]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
Jaffar
Member

Откуда:
Сообщений: 633
ptr128
Jaffar
кэп, никто из местных в здравом уме не будут отвечать новичку на риторический вопрос километрами самописного текста и с точностью теоремы описывать все ньюансы.

Но почему то эти "местные" с упорством баранов требуют это от меня )))

Jaffar
Поэтому обвинять меня в том что я не пишу "километры" - глупо.

Приношу извинения, если обидел. Значит был не прав. Обвинять ни в чем не хотел и это действительно глупо.


все в порядке .
НО бараны - это не местные - это новички.
26 дек 17, 14:10    [21063202]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Jaffar
TaPaK
пропущено...

это вы про это

пропущено...

то я вам скажу что триггеры нихрена не гарантируют



будете рассказывать про восстановление после сбоев?

зачем?
какую логическую связь данных гарантирует триггер

CREATE TRIGGER reminder1  
ON Sales.Customer  
AFTER INSERT, UPDATE   
AS PRINT 'Сам дурак';  
GO  

или это не триггер?
26 дек 17, 14:12    [21063219]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Jaffar,

К тому же, КМК, ТС`ы которые пишут свой первый вопросительный пост:
- не пойми как с ошибками и не могут на человеческом языке выразить свою мысль, но при этом пишут километры "буков"
- просто скопировав условие задачи и т.п.(типа у меня что-то не работает в процедуре и далее процедура "over_100500" строк).
недостойны детального ответа.
26 дек 17, 14:16    [21063234]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
invm
Member

Откуда: Москва
Сообщений: 9343
ptr128
Потому что добиться этого можно только в частном случае, да еще и не всегда, а для конкретного плана (планов) запросов. Которые обладают особенностью меняться по мере эксплуатации БД.
Ну-ну, не нужно быть столь категоричным, знаток вы наш. Не знание как это сделать не означает невозможность.
ptr128
Как можно списать товар по результатам отчета?
Не знаю. Это ваши очередные бредни. Об отчетах речь не шла.
ptr128
Как может оказаться списана только часть товара при двухшаговом резервировании-списании по одной строке в транзакции?
Речь шла о документе, а не о его строке и о вашем способе проводить документ построчно.
ptr128
В упор не вижу.
Понятно. Тогда необходима консультация офтальмолога.

Не пытайтесь коверкать вопросы и уходить в сторону. Надувать щеки тоже не нужно - не подействует.
26 дек 17, 14:22    [21063262]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
Jaffar
недостойны детального ответа.

Ну все мы когда-то были молодыми и глупыми...
У меня сейчас очень большие проблемы в кадровом вопросе. Субъективно, кажется, что уровень знаний падает год за годом, а ЧСВ растет все быстрее и быстрее. Поэтому, если удастся мне кого-то подучить, может быть и ко мне прийдет тот, кого кто-то подучил?
26 дек 17, 14:26    [21063289]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
Jaffar
Member

Откуда:
Сообщений: 633
TaPaK
Jaffar
пропущено...



будете рассказывать про восстановление после сбоев?

зачем?
какую логическую связь данных гарантирует триггер

CREATE TRIGGER reminder1  
ON Sales.Customer  
AFTER INSERT, UPDATE   
AS PRINT 'Сам дурак';  
GO  

или это не триггер?




кэп, как-бы, я думаю, что не стоит объяснять и это само собой разумеется - что бизнес_целостность данных гарантируется не только наличием какого-то триггера но и кодом в нем написанным.
Или вы думали что триггер типа "сам дурак" - это то что я советовал?

Суть то в том что триггер позволяет вызвать ваш_код каждый раз когда происходит изменение данных в одном месте и на осн. этих изменений изменить другие бизнес_логически связанные данные или отвергнуть изменение.

т.к. при изменении табл. документов - изменить баланс.(если это возможно не закрыт день и т.п.)

И конечно же кэп речь идет о штатном измении т.е. insert, update, delete.



Конечно можно логику навешать на интерфейс и типа все делать в процедурах, но в этом случае нет защиты от просто
insert, update, delete.
Можно конечно и это предусмотреть рулением правами и т.п.
типа дать доступ только к процедурам и view и никаких таблиц - вы за это ратуете?
26 дек 17, 14:27    [21063296]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
Jaffar
Member

Откуда:
Сообщений: 633
ptr128
Jaffar
недостойны детального ответа.

Ну все мы когда-то были молодыми и глупыми...
У меня сейчас очень большие проблемы в кадровом вопросе. Субъективно, кажется, что уровень знаний падает год за годом, а ЧСВ растет все быстрее и быстрее. Поэтому, если удастся мне кого-то подучить, может быть и ко мне прийдет тот, кого кто-то подучил?



Наверное правильно помочь человеку, который сам постарался и у него не получилось.
Но помогать человеку, который сам не потрудился даже сформулировать вопрос нормально и сам ничего не поискал - тут же есть раздел типа "платная помощь/работа".

На форуме врядли кто-то кого-то научит - ЧСВ как правило растет по exp, а большенство из тех кто действительно неплохо знают
отвечают односложно или вообще изредко "снисходят" до "всяких".


==> уровень знаний падает год за годом
еще в 2002 нам преподы говорили что студенты тупеют год от года, а уж теперь.
В бой идут одни старики.
26 дек 17, 14:34    [21063320]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Jaffar,

суть в формулировке
автор
что только они гарантируют логическую связь данных

сами триггеры ничего не гарантируют, гаратируют описанную бизнес-логику которая реализуются хоть констрейнами, хоть триггерами, хоть хранимками, до хоть молитвами :)
а в борьбе триггеры vs хранимке в другой ветке и я за здравые триггеры :)
26 дек 17, 14:35    [21063324]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1364
Jaffar
Можно конечно и это предусмотреть рулением правами и т.п.
типа дать доступ только к процедурам и view и никаких таблиц - вы за это ратуете?


Вообще на мой взгляд именно этот подход и должен рассматриваться в первую очередь.
Выставлять на показ таблицы с их потрохами не есть best practice.
26 дек 17, 14:38    [21063338]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
invm
ptr128
Потому что добиться этого [строго определенного порядка] можно только в частном случае, да еще и не всегда, а для конкретного плана (планов) запросов. Которые обладают особенностью меняться по мере эксплуатации БД.
Ну-ну, не нужно быть столь категоричным, знаток вы наш. Не знание как это сделать не означает невозможность.

Вперед, расскажите, как можно добиться строго определнной сортировки при UPDATE в общем случае

Или давйте хотя бы пример: 21063123
А не можете, так не мешайте общаться.

invm
товар будет списан только с части документа
ptr128
Как можно списать товар по результатам отчета?
Как может оказаться списана только часть товара при двухшаговом резервировании-списании по одной строке в транзакции?
Не знаю. Это ваши очередные бредни.

К сожалению, в Ваших бреднях очень сложно разобраться. Поэтому было задано сразу два вопроса. Так как непонятно было к чему относился вопрос: к получению данных агрегированным запросом для отчета или к транзакционной двухшаговой схеме.

invm
Речь шла о документе, а не о его строке и о вашем способе проводить документ построчно.

Подробно алгоритм описан тут: 21062720
Ваши претензии?

Да, кстати:
invm
Не пытайтесь коверкать вопросы и уходить в сторону. Надувать щеки тоже не нужно - не подействует.
26 дек 17, 14:43    [21063359]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ptr128,

автор
добиться строго определнной сортировки при UPDATE в общем случае

это через гугл-переводчик прогнали?
26 дек 17, 14:49    [21063377]     Ответить | Цитировать Сообщить модератору
 Re: не удается написать триггер  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Я за вами не успеваю, какая-такая очередность выполнения апдейта? Апдейт это инструкция для сервера, она не должна гарантировать никакой очередности.
Очередность гарантирует только код скуля, описывающий бизнес логику. Или код клиента.

Причем тут апдейты?
26 дек 17, 14:54    [21063405]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить