powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Валидность данных в одной строке и одной таблице.
6 сообщений из 6, страница 1 из 1
Валидность данных в одной строке и одной таблице.
    #39591562
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть таблица Invoices (счета) и соответственно есть InvoicesDetailes (позиции товаров в счете).
В каждой строке InvoicesDetailes есть куча правил на Update, которые приходится проверять триггерами, например,
1. QTY > 0
2. QTY_Ready >= 0 (собрано или уже готово комплектов на складе)
3. QTY >= QTY_Ready
4. Д.б. QTY_Ready = 0 если IsComplect=0 (IsComplect - bit поле, говорит о том, что д.б. сборка ... на складе)
5. Если IsComplect=1, то
6. и т.д. много всего.

Т.е. простая валидность данных в одной строке и одной и таблице по данным разных полей.
--
Вопрос: проверять всё триггерами или есть альтернатива?
--
Правильно ли будет создать поле ValidReq (Computed Column Sp.), написать функцию InvoicesDetailes_ValidReq() для него. В этой функции делать все проверки, а триггер смотрит только на ValidReq = True ?
...
...
Рейтинг: 0 / 0
Валидность данных в одной строке и одной таблице.
    #39591569
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггеры или CONSTRAINT <ИмяКонстрейнта> CHECK(...).
...
Рейтинг: 0 / 0
Валидность данных в одной строке и одной таблице.
    #39591655
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LightNТ.е. простая валидность данных в одной строке и одной и таблице по данным разных полей.
--
Вопрос: проверять всё триггерами или есть альтернатива?
--
Правильно ли будет создать поле ValidReq (Computed Column Sp.), написать функцию InvoicesDetailes_ValidReq() для него. В этой функции делать все проверки, а триггер смотрит только на ValidReq = True ?Ио есть проверка в пределах одной строки одной таблицы? Тогда CHECK CONSTRAINT, как уже посоветовали.
LightNПравильно ли будет создать поле ValidReq (Computed Column Sp.), написать функцию InvoicesDetailes_ValidReq() для него. В этой функции делать все проверки, а триггер смотрит только на ValidReq = True ?Если уж писать функцию, то можно вставить её тоже в чек-констрейн, если триггер не нужен для других целей. Если нужен, то лучше в него, что бы не размазывать логику по куче мест.
...
Рейтинг: 0 / 0
Валидность данных в одной строке и одной таблице.
    #39591726
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Это Да! Но ...
У CHECK CONSTRAINT есть минус (или я просто не в курсе) - клиенту с ошибкой ничего вразумительного не передается, как например,
Код: sql
1.
RAISERROR ('Нельзя собрать комплектов больше чем в позиции счета!', 16, 1)



О, пока писал, сам придумал:
1-н TRIGGER, 1-о УСЛОВИЕ, 1-н ROLLBACK TRAN,
а на RAISERROR просто сделать CASE и через него передавать клиенту сообщение, в зависимости от того как сработал ROLLBACK TRAN.

Спасибо за ответ.
...
Рейтинг: 0 / 0
Валидность данных в одной строке и одной таблице.
    #39591730
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LightNalexeyvg,

Это Да! Но ...
У CHECK CONSTRAINT есть минус (или я просто не в курсе) - клиенту с ошибкой ничего вразумительного не передается, как например,
Код: sql
1.
RAISERROR ('Нельзя собрать комплектов больше чем в позиции счета!', 16, 1)




О, пока писал, сам придумал:
1-н TRIGGER, 1-о УСЛОВИЕ, 1-н ROLLBACK TRAN,
а на RAISERROR просто сделать CASE и через него передавать клиенту сообщение, в зависимости от того как сработал ROLLBACK TRAN.

Спасибо за ответ.CONSTRAINT можно назвать [Нельзя собрать комплектов больше чем в позиции счета!].
А имя констрейнта упоминается в сообщении сервера.
Кроме того, имя (любое) констрейнта можно проверять на клиенте
и формировать там соответсвующий текст сообщения.
...
Рейтинг: 0 / 0
Валидность данных в одной строке и одной таблице.
    #39591756
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iapCONSTRAINT можно назвать [Нельзя собрать комплектов больше чем в позиции счета!].
А имя констрейнта упоминается в сообщении сервера.
Кроме того, имя (любое) констрейнта можно проверять на клиенте
и формировать там соответсвующий текст сообщения. CONSTRAINT можно назвать [Нельзя собрать комплектов больше чем в позиции счета!].
Это здорово! :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Валидность данных в одной строке и одной таблице.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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