【发布时间】:2016-02-25 13:49:21
【问题描述】:
下面的代码我需要循环通过为每个记录集发送电子邮件的查询 - 似乎工作了一段时间,现在我似乎得到了一些好的和一些空白 - 任何人都可以看到为什么有些会变成空白吗?如果我运行查询,它始终会给我正确的结果 - 没有空白行,所以只能假设它与游标有关?
USE [Transport_Comp1]
GO
/****** Object: StoredProcedure [dbo].[ssp_EmailPOD] Script Date: 02/25/2016 13:42:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ssp_EmailPOD]
AS
DECLARE @name VARCHAR(20),
@dtDate NVARCHAR(50),
@email NVARCHAR(50),
@szBlockCapitols NVARCHAR(50),
@dwJobnumber NVARCHAR(50),
@szDelAddressRef NVARCHAR(50),
@dwInternetJobNo NVARCHAR(50),
@szDelpostCode NVARCHAR(50),
@dwrDecimalLongitude NVARCHAR(50),
@dwrDecimalLatitude NVARCHAR(50),
@szDelAddrName NVARCHAR(50)
DECLARE @body NVARCHAR(1000)
DECLARE C1 CURSOR FOR
SELECT JobItem.dwJobNumber, JobItem.szDelAddrName, JobItem.szDelAddressRef, JobItem.dwInternetJobNo, JobItem.szDelPostCode, Signature.szBlockCapitols, Signature.dwrDecimalLongitude, Signature.dwrDecimalLatitude, StirlingManager_Comp1.dbo.SalesAccounts.szReportText8, Signature.dtDate
FROM dbo.JobItem INNER JOIN dbo.dms_document ON dbo.JobItem.dwJobItemId = dbo.dms_document.dwJobItemId LEFT OUTER JOIN dbo.Signature ON dbo.dms_document.id = dbo.Signature.dwDocumentIdFK LEFT OUTER JOIN DocArchive_Comp1.dbo.dms_document AS dms_document_1 ON dbo.dms_document.id = dms_document_1.id LEFT OUTER JOIN StirlingManager_Comp1.dbo.SalesAccounts ON dbo.JobItem.szAccCode = StirlingManager_Comp1.dbo.SalesAccounts.szAccountCode
WHERE [Transport_Comp1].[dbo].[Signature].[dtDate] > DATEADD(MINUTE, -5, GETUTCDATE()) AND [Transport_Comp1].[dbo].[Signature].[dtDate] < DATEADD(SECOND,-1,GETUTCDATE()) AND Transport_Comp1.dbo.Signature.bArrived = 0
ORDER BY dtDate ASC;
OPEN C1
FETCH NEXT FROM C1 INTO
@dwJobnumber, @szDelAddrName, @szDelAddressRef, @dwInternetJobNo, @szDelPostCode, @szBlockCapitols, @dwrDecimalLongitude, @dwrDecimalLatitude, @email, @dtDate
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @body = '<html>' + '<BR><BR>'
SET @body = @body + '<b>Your Delivery was completed at : ' + @dtDate + '<BR><BR>'
SET @body = @body + 'Your delivery was signed for by : ' + @szBlockCapitols + '<BR><BR>'
SET @body = @body + 'Latitude : ' + @dwrDecimalLatitude + '<BR>' + 'Longitude : ' + @dwrDecimalLongitude + '<BR>'
SET @body = @body + 'Delivery to : ' + @szDelAddrName + '<BR>'
SET @body = @body + 'Postcode : ' + @szDelpostCode + '<BR>'
SET @body = @body + 'Delivery Reference :' + @szDelAddressRef + '<BR></html>'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SQL_Email',
@recipients = @email,
@subject = 'EMAIL POD',
@body = @body,
@body_format ='HTML'
FETCH NEXT FROM C1 INTO
@dwJobnumber, @szDelAddrName, @szDelAddressRef, @dwInternetJobNo, @szDelPostCode, @szBlockCapitols, @dwrDecimalLongitude, @dwrDecimalLatitude, @email, @dtDate
END
CLOSE C1
DEALLOCATE C1
【问题讨论】:
-
您是否尝试过注释掉 dbmail 并放入打印命令?如果你在 @body 中得到一个空值,它会导致各种问题(我也会在构建它时使用 ISNULL(@var, '')。
标签: sql-server database stored-procedures cursor sendmail