Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите с триггером... / 2 сообщений из 2, страница 1 из 1
01.09.2002, 19:34:02
    #32047341
mDmitriy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с триггером...
Есть 2 таблицы (лишнее поскипано):
1. Гости
CREATE TABLE H_Guest (
IdGuest int IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
IdGuestGroup int NULL ,
NameGuest nvarchar (100) COLLATE Cyrillic_General_CI_AS NOT NULL ,
PaidLimit money NOT NULL CONSTRAINT DF_H_Guest_PaidLimit DEFAULT (0),
CONSTRAINT PK_H_Guest PRIMARY KEY CLUSTERED
(IdGuest) ON PRIMARY ,
CONSTRAINT FK_H_Guest_H_GuestGroup FOREIGN KEY
(IdGuestGroup) REFERENCES H_GuestGroup (IdGuestGroup)
) ON PRIMARY

2. Группы гостей
CREATE TABLE H_GuestGroup (
IdGuestGroup int IDENTITY (1, 1) NOT NULL ,
NameGroup nvarchar (80) NOT NULL ,

GuestCount int NOT NULL CONSTRAINT DF_H_GuestGroup_GuestCount DEFAULT (0),
PaidCount int NOT NULL CONSTRAINT DF_H_GuestGroup_PaidCount DEFAULT (0),
PaidLimit money NOT NULL CONSTRAINT DF_H_GuestGroup_PaidLimit DEFAULT (0),

CONSTRAINT PK_H_GuestGroup PRIMARY KEY CLUSTERED
(IdGuestGroup) ON PRIMARY ,
) ON PRIMARY

Есть триггер:
CREATE TRIGGER h_Guest_IUD ON H_Guest
FOR INSERT, UPDATE, DELETE
AS
IF NOT UPDATE (IdGuestGroup) AND NOT UPDATE (PaidLimit) RETURN

DECLARE @IdGuestGroup INT
DECLARE @DeltaGuest INT, @DeltaPaid INT
DECLARE @PaidLimit MONEY

SET @DeltaGuest = 0
SET @DeltaPaid = 0
SET @PaidLimit = 0.0


IF EXISTS (SELECT COUNT (*) FROM INSERTED) BEGIN
/* новые данные */
SELECT @IdGuestGroup = i.IdGuestGroup,
@DeltaGuest = CASE
WHEN i.IdGuestGroup = NULL THEN 0
WHEN i.IdGuestGroup <> NULL THEN 1
END,
@DeltaPaid = CASE
WHEN i.PaidLimit = 0 THEN 0
WHEN i.PaidLimit <> 0 THEN 1
END,
@PaidLimit = i.PaidLimit
FROM INSERTED I

UPDATE H_GuestGroup
SET GuestCount = GuestCount + @DeltaGuest,
PaidCount = PaidCount + @DeltaPaid,
PaidLimit = PaidLimit + @PaidLimit
WHERE IdGuestGroup = @IdGuestGroup
END

IF EXISTS (SELECT COUNT (*) FROM DELETED) BEGIN
/* старые данные */
SELECT @IdGuestGroup = d.IdGuestGroup,
@DeltaGuest = CASE
WHEN d.IdGuestGroup = NULL THEN 0
WHEN d.IdGuestGroup <> NULL THEN -1
END,
@DeltaPaid = CASE
WHEN d.PaidLimit = 0 THEN 0
WHEN d.PaidLimit <> 0 THEN -1
END,
@PaidLimit = d.PaidLimit
FROM DELETED D

UPDATE H_GuestGroup
SET GuestCount = GuestCount + @DeltaGuest,
PaidCount = PaidCount + @DeltaPaid,
PaidLimit = PaidLimit - @PaidLimit
WHERE IdGuestGroup = @IdGuestGroup
END

При попытке привязать гостя к группе выдает сообщение типа
" в поле <GuestCount> добавляется значение NULL"

Объясните, плииз, откуда там NULL?

С уважением, Дмитрий
...
Рейтинг: 0 / 0
02.09.2002, 09:57:45
    #32047361
dmakar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с триггером...
Я думаю проблема с крнструкцией:
...
CASE
WHEN i.IdGuestGroup = NULL THEN 0
WHEN i.IdGuestGroup <> NULL THEN 1
END
...

используй:
i.IdGuestGroup is NULL
и
NOT i.IdGuestGroup is NULL
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите с триггером... / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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