2012-06-21 61 views
0

我正在使用存儲過程在表中使用用戶發票發送電子郵件。我遇到的問題是當發票行數達到一定數量時,它將不再打印。例如 - 我們有一個有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 
+0

如果您採取相同的內容並通過普通的電子郵件客戶端發送電子郵件,會發生什麼? –

+0

對不起 - 我不知道該怎麼做。我相當新的SQL和HTML。 –

+0

你的意思是把發票粘貼到郵件正文中嗎?我在Excel中將發票複製到了一張表格中,並將其粘貼到電子郵件正文中。我不確定這是不是你的意思.... –

回答

0

在宣言:

@HTML varchar(6000) 

是否足夠?

+0

我將把它改爲max,看看會發生什麼!謝謝 –

+0

非常感謝你 - 我將尺寸改爲MAX,現在它完美運行!謝謝大家的幫助和建議:) –