2013-11-12 2 views
0

Я написал хранимую процедуру, которая работает каждый день и обнаруживает, что мы не можем обработать из-за недостаточной информации о проверке. Результаты этого запроса дают мне таблицу с 4 столбцами, один из которых - адрес электронной почты, три других столбца - контрольная информация для необработанной проверки.
CHECK_AMT | CHECK_DATE | CUSTOMER_NAME | EMAIL_ADDRESSSQL Отправка по электронной почте разных строк на разные адреса электронной почты

Таким образом, каждая строка содержит информацию для другой проверки и/или другого клиента. Я хочу, чтобы SQL отправил электронное письмо в Mr/s. [EMAIL_ADDRESS] в каждой компании [COMPANY_NAME], уведомляя их о том, что им нужно связаться с нами в отношении чека от [CHECK_DATE] за $ [CHECK_AMT]. Каждый клиент может получать электронную почту только для собственной проверки, а не для всей таблицы, которая создается хранимой процедурой.

Я просмотрел другие электронные письма, созданные SQL, но havent нашел тот, который отправляет электронные письма таким образом. Любые указания по отправке электронной почты из строки 1 на адрес электронной почты в строке1, информация от строки2 до адреса электронной почты в строке2 ... и т. Д.? Я работаю с sql всего около 3 недель, поэтому я все еще очень новичок во всем. Если у кого есть вопросы, я буду рад ответить на них. Спасибо!

+0

Проблема с тем, что вы не знаете, как работать с установленной по одной строке за раз, или это проблема, которую вы не знаете, как сообщить SQL Server о отправке сообщения электронной почты (или и того и другого) ? –

+0

Оба. Я никогда не создавал электронные письма через sql, не говоря уже о создании нескольких разных электронных писем из одной таблицы. Мой sql knowledege по-прежнему довольно простой ... – user2980057

+0

Итак, у вас есть два вопроса. Прежде чем вы начнете программировать это, вы захотите пойти [настроить почтовую базу данных, например. здесь] (http://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server) (или, возможно, решите, не хотите ли вы, чтобы SQL Server отправлял почту в первую очередь - в общем, лучше отправлять почту из другого места, ИМХО). –

ответ

0
DECLARE 
    @ch_amt DECIMAL(20,2), 
    @ch_date DATE, 
    @c_name NVARCHAR(255), 
    @email VARCHAR(320), 
    @msg NVARCHAR(MAX); 

DECLARE c CURSOR LOCAL FAST_FORWARD FOR 
    SELECT CHECK_AMT, CHECK_DATE, CUSTOMER_NAME, EMAIL_ADDRESS 
    FROM dbo.SomeTable 
    WHERE [some clause that lets you know this check was nOt processed]; 

OPEN c; 

FETCH c INTO @ch_amt, @ch_date, @c_name, @email; 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @msg = N'Dear ' + @c_name + ', we could not process your check...'; 

    EXEC msdb.dbo.sp_send_dbmail 
    @recipients = @email, 
    @subject = N'Check processing failure', 
    @body = @msg; 

    FETCH c INTO @ch_amt, @ch_date, @c_name, @email; 
END 

CLOSE c; 
DEALLOCATE c; 

Предполагается, что Mail Mail настроен и вы хотите отправить почту из профиля по умолчанию. See the documentation for sp_send_dbmail for more info.

0

Я думаю, вам просто нужна какая-то петля. Либо курсор, или while цикла, может быть что-то вроде:

declare @check_id int; 
declare @email varchar(100); 
declare @check_date date; 
...etc... 

while exists (select 1 from emails where ... and msg_sent = 0) 
begin 
    select top 1 @check_id = check_id, @email = email, @check_date = check_date, ... 
    from emails 
    where ... and msg_sent = 0; 

    ' Now you've got variables which you can use to send your email 

    update emails set msg_sent = 1 
    where check_id = @check_id; 
end; 

Вы, вероятно, можете очистить Петлю немного, чтобы избежать удвоения запросов, но вы получите идею ...

Смежные вопросы