2016-01-06 2 views
1

Я пытаюсь создать базу триггеров для отправки электронной почты для каждого пользователя в каждой записи, созданной/вставленной в мою таблицу, так как у меня уже есть путь в DB ниже моего кода, пожалуйста если кто-нибудь может мне помочь в этомтриггер для отправки почты при вставке записи в формате PDF

CREATE TRIGGER DP_READY 
    ON dbo.TimesheetLog 
    for insert 
AS 
    declare @pdf nvarchar (max) 
declare @email nvarchar (50) 
declare @fcode nvarchar (50) 
declare @date date 
    set @pdf= (select distinct 'C:\Papyrus_Router\Output\PDF' + '\' + a.cpdffilename AS pdf_f , b.Name,b.cforeman, b.Email 
    from timesheetlog as a left join EmailSubscription b on right(ltrim(rtrim(a.cheaderkey)) ,6)= b.cforeman 
    where cstatus = 'DP-READY') 

    set @email= (select distinct b.Email 
    from timesheetlog as a left join EmailSubscription b on right(ltrim(rtrim(a.cheaderkey)) ,6)= b.cforeman 
    where cstatus = 'DP-READY') 

    set @fcode = (select distinct b.cforeman +'-'+ b.Name+'-'+ convert(varchar(50),convert(date,a.dcreated)) 
    from timesheetlog as a left join EmailSubscription b on right(ltrim(rtrim(a.cheaderkey)) ,6)= b.cforeman 
    where cstatus = 'DP-READY') 
    SET NOCOUNT ON; 
set @date = (select distinct convert(date,a.dcreated) 
    from timesheetlog as a left join EmailSubscription b on right(ltrim(rtrim(a.cheaderkey)) ,6)= b.cforeman 
    where cstatus = 'DP-READY') 
    -- Insert statements for trigger here 
    if CHARINDEX(@pdf, @email) > 0 and @date = getdate() 
BEGIN 
EXEC msdb.dbo.sp_send_dbmail 
    @[email protected], 
    @file_attachments = @pdf, 
    @subject = @fcode, 
    @body = 'Your Sync data from the Pens ' 

END 
GO 

утра получаю эту ошибку

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS. 
+0

установить переменные, как: выберите @ PDF = 'C: \ Papyrus_Router \ Output \ PDF' + '\' + a.cpdffilename из timesheetlog, как левое соединение EmailSubscription b справа (ltrim (rtrim (a.cheaderkey)), 6) = b.cforeman , где cstatus = 'DP-READY' –

ответ

0

Вы не можете назначить несколько значений в переменную:

set @pdf= (
    select distinct 'C:\Papyrus_Router\Output\PDF' + '\' + a.cpdffilename AS pdf_f, 
    b.Name, 
    b.cforeman, 
    b.Email 

Проблема: имя, cforeman и электронная почта.

Кроме того, ваш триггер не использует виртуальную таблицу inserted вообще, поэтому он, вероятно, не работает так, как вы ожидаете.

+0

благодаря его работе, я не понял, что вы имеете в виду для виртуальной стоимости, я пытаюсь вставить новую запись в мой таблицы timesheetlog ничего не происходит ?? @jamesZ –

0

Изменить триггер с помощью следующего кода:

CREATE TRIGGER DP_READY 
ON dbo.TimesheetLog 
for insert 
AS 
    declare @pdf nvarchar (max) 
    declare @email nvarchar (50) 
    declare @fcode nvarchar (50) 
    declare @date date 

    select @pdf='C:\Papyrus_Router\Output\PDF' + '\' + a.cpdffilename, 
    @fcode=b.cforeman +'-'+ b.Name+'-'+ convert(varchar(50),convert(date,a.dcreated)), 
    @email=b.Email, 
    @date=convert(date,a.dcreated) 
    from timesheetlog as a left join EmailSubscription b 
    on right(ltrim(rtrim(a.cheaderkey)) ,6)= b.cforeman 
    where cstatus = 'DP-READY' 

BEGIN 
EXEC msdb.dbo.sp_send_dbmail 
@[email protected], 
@file_attachments = @pdf, 
@subject = @fcode, 
@body = 'Your Sync data from the Pens ' 

END 
GO 
+0

как я могу получить последнюю вставленную или обновленную запись, как всегда @Sundar Singh –

+0

вы можете получить свои столбцы из вставленного набора результатов. SELECT * FROM INSERTED. –

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