현재 스토어드 프로 시저를 사용하는 테이블에 사용자 송장 전자 메일을 보내고 있습니다. 내가 가지고있는 문제는 인보이스 행 수가 일정 금액에 도달하면 더 이상 인쇄되지 않는다는 것입니다. 예를 들어 50 개의 인보이스가 있지만 37 개의 인쇄물이있는 공급 업체가 있습니다. 그 이상으로 테이블을 확장 할 수있는 방법이 있습니까? 어떤 도움을 주셔서 감사합니다! 선언에서SQL 메일로 html 테이블 서식 지정
USE [CMSOPEN]
GO
/****** Object: StoredProcedure [dbo].[_HM_EXPENSE_EMAIL] Script Date: 06/21/2012 10:15:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_HM_EXPENSE_EMAIL] (@schedule_num int = 0)
AS
If @schedule_num = 0 return -1
select a.source_tran_uno, v.vendor_id, n.name remit_name,
IsNull(n.internet_addr, '[email protected]') internet_addr, p.car_phone,
addr.address1, addr.city, addr.state_code,
c.check_num, c.check_date, c.request_num,
i.invoice_num, i.invoice_date,
c.chk_amt, a.ap_amt * a.sign * -1 as invoice_amt, isnull(left(t.txt1, 500), '') as comment
into #t1
from apt_invoice_amt a inner join apt_check c on a.source_Tran_uno = c.tran_uno
inner join hbm_address addr on c.address_uno = addr.address_uno
inner join apt_invoice i on a.inv_tran_uno = i.tran_uno
inner join apm_vendor v on a.remit_vend_uno = v.vendor_uno
inner join hbm_name n on v.name_uno = n.name_uno
inner join apt_text t on i.text_id = t.text_id
inner join HBM_NAME_PEOPLE p on n.PEOPLE_NAME_UNO = p.name_uno
WHERE c.SCHEDULE_NUM = @Schedule_num
and i.aptype_code = 'EXPREM'
update #t1
set internet_addr = '[email protected]'
where internet_addr = ''
SET NOCOUNT ON
Declare @HTML varchar(6000), @table VARCHAR(MAX), @source_tran_uno int, @check_date datetime, @chk_amt money, @remit_name varchar(120),
@vendor_id varchar(16), @city varchar(30), @state_code varchar(2), @internet_addr varchar(80),@sec_email varchar(80), @request_num int
DECLARE ach_cursor CURSOR FOR
select distinct source_tran_uno, check_date, chk_amt, remit_name, rtrim(vendor_id), city, state_code, internet_addr, car_phone, request_num
from #t1 t
order by remit_name
OPEN ach_cursor
FETCH NEXT FROM ach_cursor
INTO @source_tran_uno, @check_date, @chk_amt, @remit_name, @vendor_id, @city, @state_code, @internet_addr, @sec_email, @request_num
WHILE @@FETCH_STATUS = 0
BEGIN
Select @HTML = '<H1>Expense Report Payment Advice</H1>' +
'<BR>Date: ' + convert(varchar(10), IsNull(@check_Date, ''), 101) + '<BR>' +
'<B>Total: $' + Cast(@Chk_Amt as varchar(15)) + '</B><BR><BR>' +
IsNull(@remit_name, '') + '<B>(' + IsNull(@Vendor_ID, '') + ')</B><BR>' +
'<BR><BR>' +
'Payment for the following expense report(s) have been included as part of your payroll deposit <BR><BR>'
SET @table =
'<TABLE border=1 cellpadding=5>' +
'<tr><th width=100 align=center><B>Expenditure Date</B></th><th width=100 align=center><B>Expense Processing Date</B></th><th width=100 align=center><B>Amount Paid</B></th><th width=250 align=center><B>Reimbursement Narrative</B></th></tr>' +
CAST ((
select td = invoice_num, '',
td = convert(varchar(10), invoice_date, 101), '',
td = '$' + convert(varchar(12), invoice_amt, 1), '',
td = comment
from #t1 t
where t.source_Tran_uno = @source_tran_uno
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX)) +
N'</table>' ;
--select @internet_addr
--select @HTML
--select @table
set @HTML = @HTML + @table
--select @html
-- Email delimiter must be semicolon
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Accounting ACH Notification', @recipients = @internet_addr, @copy_recipients = @sec_email, @blind_copy_recipients = '[email protected]',
--EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Accounting ACH Notification', @recipients='[email protected]', @blind_copy_recipients = '[email protected]',
@subject = 'Payment Advice from Honigman Miller' ,
@body = @HTML,
@body_format = 'HTML' ;
-- Get the next Billing Attorney.
FETCH NEXT FROM ACH_cursor
INTO @source_tran_uno, @check_date, @chk_amt, @remit_name, @vendor_id, @city, @state_code, @internet_addr, @sec_email, @request_num
END
CLOSE ACH_cursor
DEALLOCATE ACH_cursor
drop table #t1
동일한 콘텐츠를 가져 와서 일반 이메일 클라이언트를 통해 이메일을 보내면 어떻게됩니까? –
죄송합니다 - 어떻게하는지 모르겠습니다. 나는 상당히 sql과 html에 익숙하다. –
인보이스를 가져 와서 전자 메일 본문에 붙여 넣으시겠습니까? 나는 송장을 엑셀의 테이블에 복사하고 이메일 메시지 본문에 잘 붙였다. 나는 이것이 당신이 의미하는 것이 었는지 확신 할 수 없다. ... –