|
|
|
Valued Member
      
Group: General Forum Members
Last Login: 2 days ago @ 11:19 AM
Points: 50,
Visits: 108
|
|
-- I am hoping not to use cursor
-- Query is
select * from Orders where EmailSent = 0
--I want to loop through records with above query send email and Set Emailsent field
--Email Code EXEC msdb.dbo.sp_send_dbmail @profile_Name ='Administrator', @recipients= Orders.CustomerEmailAddress , @subject = 'Please send Feedback for Order#' + Orders.OrderNum , @body = 'Please send Feedback for Order#' + Orders.OrderNum
--Update Field
set Orders.EmailSent = 1
|
|
|
|
|
SSChampion
        
Group: General Forum Members
Last Login: Today @ 3:33 PM
Points: 11,648,
Visits: 27,768
|
|
here's an example of what you are asking; you'll have to use a cursor if you want to send emails on a per-email basis from the data.
remember that when you assign parameters, you cannot concatent/use functions/manipulate anything in the assignment, that has to occur BEFORE you assign it.
--so this is bad: EXEC msdb.dbo.sp_send_dbmail @subject = 'Please send Feedback for Order#' + Orders.OrderNum
--this is the correct way: declare @var varchar(128) SET @var ='Please send Feedback for Order#' + Orders.OrderNum EXEC msdb.dbo.sp_send_dbmail @subject =@var
and here's the full exmaple:
DECLARE @isql VARCHAR(2000), @email VARCHAR(64), @order VARCHAR(64), @emailSubject varchar(128), @emailBody varchar(128) DECLARE c1 CURSOR FOR SELECT CustomerEmailAddress, OrderNum FROM Orders WHERE EmailSent = 0
OPEN c1 FETCH NEXT FROM c1 INTO @email,@order WHILE @@FETCH_STATUS <> -1 BEGIN SELECT @emailSubject = 'Please send Feedback for Order#' + @order, @emailBody = @emailSubject --you'd build a bigger, more descriptive string for the body.
--you cannot concatenate strings as the parameters for a query, they must be eitehr a static string or an already built variable. EXEC msdb.dbo.sp_send_dbmail @profile_Name ='Administrator', @recipients= @email , @subject = @emailSubject, @body = @emailBody
FETCH NEXT FROM c1 INTO @email,@order END CLOSE c1 DEALLOCATE c1
Lowell
--There is no spoon, and there's no default ORDER BY in sql server either. Actually, Common Sense is so rare, it should be considered a Superpower. --my son
|
|
|
|
|
Valued Member
      
Group: General Forum Members
Last Login: 2 days ago @ 11:19 AM
Points: 50,
Visits: 108
|
|
Thanks for the reply. Another Quick Question. My Email body is very long. Ideally i would like to store the Body in a text file and read the text file into a SQL Variable like
set @EmailBody = 'read from the text file
Is it possible ?
|
|
|
|
|
Valued Member
      
Group: General Forum Members
Last Login: 2 days ago @ 11:19 AM
Points: 50,
Visits: 108
|
|
Thanks for the reply. Another Quick Question. My Email body is very long. Ideally i would like to store the Body in a text file and read the text file into a SQL Variable like
set @EmailBody = 'read from the text file
Is it possible ?
|
|
|
|
|
Valued Member
      
Group: General Forum Members
Last Login: 2 days ago @ 11:19 AM
Points: 50,
Visits: 108
|
|
Thanks for the reply. Another Quick Question. My Email body is very long. Ideally i would like to store the Body in a text file and read the text file into a SQL Variable like
set @EmailBody = 'read from the text file
Is it possible ?
|
|
|
|
|
Valued Member
      
Group: General Forum Members
Last Login: 2 days ago @ 11:19 AM
Points: 50,
Visits: 108
|
|
Thanks for the reply. Another Quick Question. My Email body is very long. Ideally i would like to store the Body in a text file and read the text file into a SQL Variable like
set @EmailBody = 'read from the text file
Is it possible ?
|
|
|
|
|
Valued Member
      
Group: General Forum Members
Last Login: 2 days ago @ 11:19 AM
Points: 50,
Visits: 108
|
|
Thanks for the reply. Another Quick Question. My Email body is very long. Ideally i would like to store the Body in a text file and read the text file into a SQL Variable like
set @EmailBody = 'read from the text file
Is it possible ?
|
|
|
|
|
SSChampion
        
Group: General Forum Members
Last Login: Today @ 3:33 PM
Points: 11,648,
Visits: 27,768
|
|
skb 44459 (10/19/2012) Thanks for the reply. Another Quick Question. My Email body is very long. Ideally i would like to store the Body in a text file and read the text file into a SQL Variable like
set @EmailBody = 'read from the text file
Is it possible ?
of course; it's just a separate select statement:
SELECT @EmailBody = EmailTemplate FROM Campaigns WHERE templateID = 42 --assuming there are customized fields for find and replace? SET @EmailBody = REPLACE(@EmailBody, '[firstnamePlaceholder', @FirstNameFromCursor;
Lowell
--There is no spoon, and there's no default ORDER BY in sql server either. Actually, Common Sense is so rare, it should be considered a Superpower. --my son
|
|
|
|
|
Valued Member
      
Group: General Forum Members
Last Login: 2 days ago @ 11:19 AM
Points: 50,
Visits: 108
|
|
| Actually i want to read from a text file . \\server1\temp\EmailBody.txt into a variable
|
|
|
|
|
SSC-Dedicated
           
Group: General Forum Members
Last Login: Today @ 4:35 PM
Points: 32,930,
Visits: 26,817
|
|
skb 44459 (10/19/2012) Actually i want to read from a text file . \\server1\temp\EmailBody.txt into a variable
Did you ever get an answer for this?
--Jeff Moden "RBAR is pronounced "ree-bar" and is a "Modenism" for "Row-By-Agonizing-Row".
First step towards the paradigm shift of writing Set Based code: Stop thinking about what you want to do to a row... think, instead, of what you want to do to a column."
For better, quicker answers on T-SQL questions, click on the following... http://www.sqlservercentral.com/articles/Best+Practices/61537/
For better answers on performance questions, click on the following... http://www.sqlservercentral.com/articles/SQLServerCentral/66909/
|
|
|
|