HiThe min and max effect will not cause an error but the main problem is that I 
have multiple entries in the inserted table and i am trying to pull one 
value.Here is my trigger at the moment and it is an obscenity.  I am really 
stuck what to do on this one:
USE ncontinuity2
IF EXISTS (SELECT name FROM sysobjects WHERE name = 
'updateContactCallTreeTotalsTrigger' AND type = 'TR')
DROP TRIGGER updateContactCallTreeTotalsTrigger
GO
CREATE TRIGGER updateContactCallTreeTotalsTrigger
ON CallTreeContacts
AFTER INSERT, UPDATE, DELETE
AS
SET NOCOUNT ON
DECLARE @roleType int,
@contactUid uniqueidentifier
 
IF EXISTS (SELECT * FROM Inserted) AND NOT EXISTS (SELECT * FROM Deleted)
BEGIN
IF((SELECT COUNT(*) FROM inserted) > 0)
RETURN;
SET @roleType = (SELECT calltreecontactroleid FROM inserted i)
SET @contactUid = (SELECT contactuid FROM inserted i)
END
IF EXISTS (SELECT * FROM Inserted) AND EXISTS (SELECT * FROM Deleted)
BEGIN
IF((SELECT COUNT(*) FROM inserted) > 0)
RETURN;
SET @roleType = (SELECT calltreecontactroleid FROM inserted i)
SET @contactUid = (SELECT contactuid FROM inserted i)
END
IF NOT EXISTS (SELECT * FROM Inserted) AND EXISTS (SELECT * FROM Deleted)
BEGIN
IF((SELECT COUNT(*) FROM inserted) > 0)
RETURN;
SET @roleType = (SELECT calltreecontactroleid FROM deleted d)
SET @contactUid = (SELECT contactuid FROM deleted)
END
IF (@roleType = 1)
BEGIN
UPDATE Contacts
SET planleadercount = 
(SELECT count(cc.uid) 
FROM calltreecontacts cc 
INNER JOIN CallTrees ct
ON cc.calltreeuid = ct.Uid
INNER JOIN plans p
ON p.Uid = ct.planUid
WHERE cc.contactUid = @contactUid and cc.calltreecontactroleid = 1 and 
p.deleted = 'false')
END
ELSE IF (@roleType = 2)
BEGIN
UPDATE Contacts
SET planleadercount = 
(SELECT count(cc.uid) 
FROM calltreecontacts cc 
INNER JOIN CallTrees ct
ON cc.calltreeuid = ct.Uid
INNER JOIN plans p
ON p.Uid = ct.planUid
WHERE cc.contactUid = @contactUid and cc.calltreecontactroleid = 2 and 
p.deleted = 'false')
END
ELSE IF (@roleType = 3)
BEGIN
UPDATE Contacts
SET planleadercount = 
(SELECT count(cc.uid) 
FROM calltreecontacts cc 
INNER JOIN CallTrees ct
ON cc.calltreeuid = ct.Uid
INNER JOIN plans p
ON p.Uid = ct.planUid
WHERE cc.contactUid = @contactUid and cc.calltreecontactroleid = 3 and 
p.deleted = 'false')
END
ELSE IF (@roleType = 4)
BEGIN
UPDATE Contacts
SET planleadercount = 
(SELECT count(cc.uid) 
FROM calltreecontacts cc 
INNER JOIN CallTrees ct
ON cc.calltreeuid = ct.Uid
INNER JOIN plans p
ON p.Uid = ct.planUid
WHERE cc.contactUid = @contactUid and cc.calltreecontactroleid = 4 and 
p.deleted = 'false')
END
[EMAIL PROTECTED]> Date: Tue, 12 Feb 2008 11:00:43 -0500> From: [EMAIL 
PROTECTED]> Subject: Re: [ADVANCED-DOTNET] Trigger and multiple values in the 
inserted table> To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM> > Hi Paul,> > You 
could try something like this:> > Select> @RoleType = 
Min(CallTreeContactRoleId)> From> CallTreeContacts CTC> Join Inserted I On 
CTC.Uid = I.UID> > A few points I have to make:> - You may get multiple role 
types - without knowing more about your trigger,> I cannot help you.> - If you 
can eliminate the use of a variable, and do an insert/select, for> multiple 
role types, that may be better.> - Experiment with Max and Distinct instead of 
the Min function, and think> about the semantic differences.> - In statements 
are expensive, using a join will improve performance, hence> reducing the time 
for the insert statement to complete.> > If you can provide the source for your 
trigger, I might be able to help you> more.> > Richard> -----Original 
Message-----> From: Discussion of advanced .NET topics.> [mailt
===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to