?
Solved

Email from Insert Trigger-SQL

Posted on 2008-06-26
8
Medium Priority
?
1,160 Views
Last Modified: 2012-05-05
I am looking to send an email everytime a record is inserted into a table, i have a attached the code i have in the trigger,

and below is the message i am getting when i attemp to insert into the table:

Msg 22050, Level 16, State 1, Line 0
Error formatting query, probably invalid parameters
Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 478
Query execution failed: Msg 208, Level 16, State 1, Server LINE500V7\SAGE, Line 2
Invalid object name 'inserted'.
Msg 22050, Level 16, State 1, Line 0
Error formatting query, probably invalid parameters
Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 478
Query execution failed: Msg 208, Level 16, State 1, Server LINE500V7\SAGE, Line 2
Invalid object name 'inserted'.
ALTER TRIGGER [scheme].[email_insert] 
   ON  [scheme].[opdetm] 
   AFTER INSERT
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
 
 
EXEC msdb.dbo.sp_send_dbmail 
@profile_name = '1',
@recipients = 'eoin.conway@meteorelectrical.com',
@subject = 'subject',
@body = 'body',
@query = 
'SELECT order_no FROM INSERTED with (NOLOCK)',
@execute_query_database = 'demo'
END

Open in new window

0
Comment
Question by:meteorelec
  • 4
  • 4
8 Comments
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 21873267
the "inserted" is not available in the sp_send_dbmail procedure context.

you will have to make it like this:
ALTER TRIGGER [scheme].[email_insert] 
   ON  [scheme].[opdetm] 
   AFTER INSERT
AS 
BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON; 
DECLARE @sql VARCHAR(1000)
SET @sql = 'SELECT ' + cast(order_no as varchar(100)) + ' order_no ' from inserted
 
EXEC msdb.dbo.sp_send_dbmail 
@profile_name = '1',
@recipients = 'eoin.conway@meteorelectrical.com',
@subject = 'subject',
@body = 'body',
@query = @sql,
@execute_query_database = 'demo'
END 

however, that will only send 1 of the values of order_no in case several orders are inserted at once.

Open in new window

0
 
LVL 2

Author Comment

by:meteorelec
ID: 21873337
Msg 156, Level 15, State 1, Procedure email_insert, Line 16
Incorrect syntax near the keyword 'from',

thats what i'm getting when i try to modify the trigger to that.
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 21873361
sorry...
ALTER TRIGGER [scheme].[email_insert] 
   ON  [scheme].[opdetm] 
   AFTER INSERT
AS 
BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON; 
DECLARE @sql VARCHAR(1000)
SELECT @sql = 'SELECT ' + cast(order_no as varchar(100)) + ' order_no ' 
from inserted
 
EXEC msdb.dbo.sp_send_dbmail 
@profile_name = '1',
@recipients = 'eoin.conway@meteorelectrical.com',
@subject = 'subject',
@body = 'body',
@query = @sql,
@execute_query_database = 'demo'
END 

Open in new window

0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 2

Author Comment

by:meteorelec
ID: 21873746
how would i add the order_line_no, i tryed to

@query = @OrderNo,@OrderLineNo,

but that didn't work,
declare @OrderNo CHAR(10)
declare @OrderLineNo CHAR(5)
 
select @OrderNo = [order_no] from inserted with (NOLOCK)
select @OrderLineNo = [order_line_no] from inserted with (NOLOCK)
 
Begin
 
EXEC msdb.dbo.sp_send_dbmail 
@profile_name = '1',
@recipients = 'eoin.conway@meteorelectrical.com',
@subject = 'subject',
@body = 'body',
@query = @OrderNo,
@execute_query_database = 'demo'
 
	End

Open in new window

0
 
LVL 143

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 2000 total points
ID: 21873793
here we go:
ALTER TRIGGER [scheme].[email_insert] 
   ON  [scheme].[opdetm] 
   AFTER INSERT
AS 
BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON; 
DECLARE @sql VARCHAR(1000)
SELECT @sql = 'SELECT ' + cast(order_no as varchar(100)) + ' order_no ,' 
 + cast(order_line_no as varchar(100)) + ' order_line_no '
from inserted
 
EXEC msdb.dbo.sp_send_dbmail 
@profile_name = '1',
@recipients = 'eoin.conway@meteorelectrical.com',
@subject = 'subject',
@body = 'body',
@query = @sql,
@execute_query_database = 'demo'
END 

Open in new window

0
 
LVL 2

Author Comment

by:meteorelec
ID: 21874196
I am trying to add a value using a join, but it doesn't seem to be working...

remove the below line it works fine,

+ cast(d.product as varchar(100)) + ' product '
   AFTER INSERT
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
 
DECLARE @Cost FLOAT
DECLARE @sql VARCHAR(1000)
 
SELECT @Cost = [cost]from inserted with (NOLOCK)
SELECT @sql = 
'SELECT ' 
+ cast(i.order_no as varchar(100)) + ' OrderNo ,' 
+ cast(i.order_line_no as varchar(100)) + ' OrderLineNo ,'
+ cast(d.product as varchar(100)) + ' product '
from inserted i
JOIN scheme.opdetm d
ON i.order_no = d.order_no
AND i.order_line_no = d.order_line_no
 
IF @Cost=0
 
BEGIN 
 
EXEC msdb.dbo.sp_send_dbmail 
@profile_name = '1',
@recipients = 'eoin.conway@meteorelectrical.com',
@subject = 'subject',
@body = 'body',
@query = @sql,
@execute_query_database = 'demo'
 
END
END

Open in new window

0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 21874343
is the product a varchar field?

if yes, change that line to:
+  '''' + replace(d.product , '''', '''''') + ''' product '

Open in new window

0
 
LVL 2

Author Comment

by:meteorelec
ID: 21874474
Brilliant,

thats sorted, thanks a million
0

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

One of the most important things in an application is the query performance. This article intends to give you good tips to improve the performance of your queries.
In this article, we will show how to detach and attach a database and then show how to repair a corrupt database and attach it, If it has some errors. We will show how to detach and attach using SSMS or using T-SQL sentences.
With just a little bit of  SQL and VBA, many doors open to cool things like synchronize a list box to display data relevant to other information on a form.  If you have never written code or looked at an SQL statement before, no problem! ...  give i…
Stellar Phoenix SQL Database Repair software easily fixes the suspect mode issue of SQL Server database. It is a simple process to bring the database from suspect mode to normal mode. Check out the video and fix the SQL database suspect mode problem.

590 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question