Here is a link to the now infamous trigger:
 
http://rafb.net/p/xYOA4j39.html
 
[EMAIL PROTECTED]> Date: Tue, 12 Feb 2008 16:28:20 +0000> From: [EMAIL 
PROTECTED]> Subject: Re: [ADVANCED-DOTNET] Trigger and multiple values in the 
inserted table> To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM> > > 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
_________________________________________________________________
Get Hotmail on your mobile, text MSN to 63463!
http://mobile.uk.msn.com/pc/mail.aspx
===================================
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