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

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

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

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

Констрейнты - это не befor triggers в Oracle...
...
Рейтинг: 0 / 0
19.07.2002, 14:52:19
    #32037776
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Констэйны и сообщения к ним.
befor triggers в Oracle - это почти что instead of triggers в MSSQL :)
...
Рейтинг: 0 / 0
19.07.2002, 15:00:22
    #32037778
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Констэйны и сообщения к ним.
Такая тема, прочитал статью, пробую делать как они предлагают, т.е. Update View ...., и сомо сабой получаю ошибку типа не могу делать апдейт вью, содержаще агрегатную функцию.
...
Рейтинг: 0 / 0
19.07.2002, 17:33:25
    #32037809
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Констэйны и сообщения к ним.
кто нибудь может сказать можно ли делать апдейт на вью, содержащее агрегатные функции ?
если да, то как
если нет, то тогда чего там понаписал этот чувак в своей статье ?
...
Рейтинг: 0 / 0
19.07.2002, 17:54:08
    #32037817
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Констэйны и сообщения к ним.
эй ! есть кто живой ?
...
Рейтинг: 0 / 0
19.07.2002, 18:01:29
    #32037819
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Констэйны и сообщения к ним.
BOL - Transact-SQL Reference - CREATE VIEW .... Updatable Views
...
Рейтинг: 0 / 0
19.07.2002, 18:33:56
    #32037832
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Констэйны и сообщения к ним.
в БОЛ все ясно, видимо чего-то я перемудрил (хотя делал так как в статье описано)
...
Рейтинг: 0 / 0
19.07.2002, 18:43:16
    #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
22.07.2002, 11:55:00
    #32037979
sFx
sFx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Констэйны и сообщения к ним.
Господа,
мы немного отвлеклись от темы. все таки как то можно или нет? и почему не before triggers? как я понимаю cjnstraints проверяются до модификации данных.
И еще как можно отлавливать номер ошибки по констрэйнтам? с помощью @@Error можно? а не будет на все констрайнты один и тот же номер ошибки?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Констэйны и сообщения к ним. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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