Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
kyleb
Starting Member
7 Posts |
Posted - 2012-10-15 : 12:20:38
|
Hi, there may be a better way to do this, help is appreciated. Right now, the following trigger below does execute if the "if exists" command is true, but no other inserts are firing if it is false. I want what would have inserted by default to fire if false. I am guessing I could do some type of ELSE statement to effectively INSERT via SELECT * FROM INSERTED but wasn't sure if that was necessary or if there was a better way to do this? -----------------------------------------------------------CREATE TRIGGER [dbo].[ExclCCP] ON [dbo].[EmailQueue] INSTEAD OF INSERTASIF EXISTS (Select MessageType from Inserted where MessageType=22and EmailAddress in (Select Email from Customers Where SourceID=89))BEGIN-- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON;-- Insert statements for procedure hereINSERT INTO EMAILQUEUE(OtherData)SELECT EmailAddressFROM INSERTEDWHERE MessageType=22END-----------------------------------------------------------PS -- it appears to make this work I really need to stop the insert from occurring and I can't do an UPDATE after the insert or email my email message has already fired. |
|
sunitabeck
Master Smack Fu Yak Hacker
5155 Posts |
Posted - 2012-10-15 : 14:29:43
|
After reading your posting couple of times, the logic that you are trying to implement is not clear to me. Assume that you have a few rows that you want to insert via a single insert statement. Soem have MessageType=22, some have other MessageTypes; among those with MessageType=22, some may exist in Customers where sourceId=89, and some may not. Can you describe what you want to happen in each of those cases? |
|
|
kyleb
Starting Member
7 Posts |
Posted - 2012-10-15 : 15:10:19
|
Thanks for your reply. We have certain customers coming from a particular referral source (sourceID 89) that we do NOT want to send a welcome email to (message type 22). We do not have the ability to change the underlying DLL/Visual Basic program that sends an email to all new customers, and thus are reverting to a trigger to get around our issue.If it does not meet this criteria, we want it do what it would have done had we not inserted the trigger. This would include all other message types (such as order receipts) for any sourceID (including 89).I have modified the code to do what you see below and it all seems to work except for the message type 22's that are not sourceID 89 (those are excluding from sending an email too). Here's how code currently stands:CREATE TRIGGER [dbo].[ExclCCP] ON [dbo].[EmailQueue] INSTEAD OF INSERTASIF EXISTS (Select MessageType from Inserted where MessageType=22and EmailAddress in (Select Email from Customers Where SourceID=89))BEGIN-- Insert statements for procedure hereINSERT INTO EMAILQUEUE(OtherData)SELECT EmailAddressFROM INSERTEDWHERE MessageType=22ENDELSEBEGIN-- Insert statements for procedure here INSERT INTO EMAILQUEUE (NAFILL,Status,CompanyID,MessageID,OrderID,RecordID,OrderRestaurantID,DateTimeIn,DateTimeSent,EmailAddress,EmailName,OperatorID,OtherData,MessageType)SELECT NAFILL,Status,CompanyID,MessageID,OrderID,RecordID,OrderRestaurantID,DateTimeIn,DateTimeSent,EmailAddress,EmailName,OperatorID,OtherData,MessageTypeFROM InsertedEND |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2012-10-15 : 22:15:38
|
sounds like the belowCREATE TRIGGER [dbo].[ExclCCP]ON [dbo].[EmailQueue]INSTEAD OF INSERTASIF EXISTS (Select MessageType from Inserted where MessageType=22and EmailAddress in (Select Email from Customers Where SourceID=89))BEGIN-- Insert statements for procedure hereINSERT INTO EMAILQUEUE(OtherData)SELECT EmailAddressFROM INSERTED iINNER JOIN Customers cON c.Email = i.EmailAddressWHERE MessageType=22AND c.SourceID = 89ENDELSEBEGIN-- Insert statements for procedure here INSERT INTO EMAILQUEUE (NAFILL,Status,CompanyID,MessageID,OrderID,RecordID,OrderRestaurantID,DateTimeIn,DateTimeSent,EmailAddress,EmailName,OperatorID,OtherData,MessageType)SELECT NAFILL,Status,CompanyID,MessageID,OrderID,RecordID,OrderRestaurantID,DateTimeIn,DateTimeSent,EmailAddress,EmailName,OperatorID,OtherData,MessageTypeFROM InsertedEND ------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
|
|
kyleb
Starting Member
7 Posts |
Posted - 2012-10-16 : 01:29:59
|
Thank you will give this a try and report back. |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2012-10-16 : 09:16:01
|
welcomewill wait for your reply------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
|
|
|
|
|
|
|