powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Констэйны и сообщения к ним.
12 сообщений из 12, страница 1 из 1
Констэйны и сообщения к ним.
    #32037721
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно ли в констэйнтах использовать пользовательские алармы или сообщения
Понимаю, что можно наверное перехватывать код ошибки, но как не знаю... а то системные сообщения абсолютно ничего не "говорят" пользователям...
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037738
Фотография Сергей Тихонов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы в 99% случаев работаем через хранимые процедуры. После выполнения кагого-то оператора, например INSERT или DELETE , выполняется проверка @@ERROR <> 0 , и в случае ошибки выдается соответствующий RAISERROR с нормальным русским сообщением об ошибке.
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037743
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь идет о DRI, то - варианты:

1. Использовать INSTEAD OF триггеры (MS SQL2000)
Трюки с триггерами INSTEAD OF

2. Поддержку DRI организовать с помощью обычных триггеров, без использования CONSTRAINT FOREIGN KEY. Однако, проблемы с ограничениями PRIMARY KEY, UNIQUE etc остануться.

ИМХО, конечно.
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037745
Delta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В constraint ты похоже не сможешь use-ть raiserror. В constraints можно использовать функции, но там Raiserror то же запрещены.

Констрейнты - это не befor triggers в Oracle...
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037776
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
befor triggers в Oracle - это почти что instead of triggers в MSSQL :)
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037778
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такая тема, прочитал статью, пробую делать как они предлагают, т.е. Update View ...., и сомо сабой получаю ошибку типа не могу делать апдейт вью, содержаще агрегатную функцию.
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037809
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто нибудь может сказать можно ли делать апдейт на вью, содержащее агрегатные функции ?
если да, то как
если нет, то тогда чего там понаписал этот чувак в своей статье ?
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037817
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эй ! есть кто живой ?
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037819
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOL - Transact-SQL Reference - CREATE VIEW .... Updatable Views
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037832
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в БОЛ все ясно, видимо чего-то я перемудрил (хотя делал так как в статье описано)
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037835
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример на всякий случай.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
drop table Ords
select * into Ords from Orders 

create view vwOrds as select OrderDate, count(OrderID) as q, sum(Freight) as s from Ords group by OrderDate

select * from vwOrds

create trigger tr_vwOrds_upd on vwOrds instead of update as 
if not update(s) return
update Ords set Ords.Freight = o.Freight * o.s2 / o.s1 from Ords inner join (select o.OrderID, o.Freight, d.s as s1, i.s as s2 from Ords o inner join deleted d on o.OrderDate = d.OrderDate inner join inserted i on o.OrderDate = i.OrderDate where o.OrderDate = d.OrderDate) o on Ords.OrderID = o.OrderID
 --В одном дне может быть несколько заказов. В этом случае агрегированную сумму по дню разносим в соответствии с пропорциями Freights в этом дне
 
 --o.Freight - Freight данного заказа, идентифицируемого OrderID; o.s1 - старая сумма фрайтов; o.s2 - новая.
 
go

select top  10  * from vwOrds
update vwOrds set s =  10  where OrderDate = '1996-07-04'
update vwOrds set s =  200  where OrderDate = '1996-07-08'
select top  10  * from vwOrds
select top  10  * from Ords
...
Рейтинг: 0 / 0
Констэйны и сообщения к ним.
    #32037979
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа,
мы немного отвлеклись от темы. все таки как то можно или нет? и почему не before triggers? как я понимаю cjnstraints проверяются до модификации данных.
И еще как можно отлавливать номер ошибки по констрэйнтам? с помощью @@Error можно? а не будет на все констрайнты один и тот же номер ошибки?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Констэйны и сообщения к ним.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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