FIX: Using xp_sendmail with a COMPUTE Clause Causes an Access Violation

This article has been archived. It is offered "as is" and will no longer be updated.
BUG #: 469145 (SHILOH_BUGS)
SYMPTOMS
A call to the xp_sendmail extended stored procedure might cause a handled Access Violation when all the following conditions are met:
  • The xp_sendmail call must use the @query parameter to send a recordset.
  • The query passed to the @query parameter must include a COMPUTE clause.
  • The query must return no rows.
Here is an example of a query that might experience this problem:
 EXEC master..xp_sendmail  @recipients = 'recipient_email_address', @message = 'Total Sum of Job ID' , @subject = 'Compute Sum', @width = 133 , @query = 'SELECT emp_id, fname, minit, lname, job_id, job_lvl, pub_id FROM pubs.dbo.employee WHERE 1=0 COMPUTE SUM (job_id)'
Note This problem is a regression that only affects a small number of post-SQL Server 2000 Service Pack 3 hotfix releases. This problem only applies to server computers that are running SQL Server 2000 hotfix builds between build 780 and 807 (inclusive). Check the version of the Sqlmap70.dll file that is in the BINN folder of the instance of SQL Server to determine if the instance is affected. The affected file version has the following attributes:
   Date         Time   Version        Size           File name   --------------------------------------------------------------   28-Feb-2003  01:34  2000.80.778.0  176,696 bytes  Sqlmap70.dll				
RESOLUTION

Service pack information

To resolve this problem, obtain the latest service pack for Microsoft SQL Server 2000. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:
290211 How to obtain the latest SQL Server 2000 service pack

Hotfix information

Note This hotfix (build 811) can only be applied to SQL Server 2000 Service Pack 3.

The English version of this fix has the file attributes (or later) that are listed in the following table. The dates and times for these files are listed in coordinated universal time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time tool in Control Panel.
   Date         Time   Version         Size             File name   -------------------------------------------------------------------------------   26-Feb-2003  03:41  2000.80.777.0      29,244 bytes  Dbmslpcn.dll        08-Feb-2003  05:43                    786,432 bytes  Distmdl.ldf   08-Feb-2003  05:43                  2,359,296 bytes  Distmdl.mdf   30-Jan-2003  01:55                        180 bytes  Drop_repl_hotfix.sql   07-Apr-2003  19:15  2000.80.801.0   1,557,052 bytes  Dtsui.dll           24-Apr-2003  02:51                    747,927 bytes  Instdist.sql   30-Jan-2003  01:55                      1,402 bytes  Inst_repl_hotfix.sql   08-Feb-2003  06:40  2000.80.765.0      90,692 bytes  Msgprox.dll         01-Apr-2003  02:07                      1,873 bytes  Odsole.sql   05-Apr-2003  01:46  2000.80.800.0      62,024 bytes  Odsole70.dll        02-Apr-2003  21:48  2000.80.796.0      57,904 bytes  Osql.exe            02-Apr-2003  23:15  2000.80.797.0     279,104 bytes  Pfutil80.dll        04-Apr-2003  21:27                  1,083,467 bytes  Replmerg.sql   04-Apr-2003  21:53  2000.80.798.0     221,768 bytes  Replprov.dll        08-Feb-2003  06:40  2000.80.765.0     307,784 bytes  Replrec.dll         01-Apr-2003  02:23                  1,084,828 bytes  Replsys.sql   16-Apr-2003  22:39                    115,892 bytes  Sp3_serv_uni.sql   07-Apr-2003  17:44                     25,172 bytes  Sqldumper.exe       19-Mar-2003  18:20  2000.80.789.0      28,672 bytes  Sqlevn70.rll   24-Apr-2003  05:39  2000.80.811.0     176,696 bytes  Sqlmap70.dll        08-Feb-2003  06:40  2000.80.765.0      57,920 bytes  Sqlrepss.dll        24-Apr-2003  05:39  2000.80.811.0   7,540,817 bytes  Sqlservr.exe        08-Feb-2003  06:40  2000.80.765.0      45,644 bytes  Sqlvdi.dll          26-Feb-2003  03:41  2000.80.777.0      29,244 bytes  Ssmslpcn.dll        26-Feb-2003  03:41  2000.80.777.0      82,492 bytes  Ssnetlib.dll        28-Feb-2003  01:34  2000.80.778.0      98,872 bytes  Xpweb70.dll
Note Because of file dependencies, the most recent hotfix or feature that contains the files may also contain additional files.
STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article. This problem was first corrected in Microsoft SQL Server 2000 Service Pack 4.
WORKAROUND
To work around the problem you can modify the query so that it only performs a COMPUTE when there are rows to be returned. For example, you can modify the query in the "Symptoms" section as follows to avoid the problem:
EXEC master..xp_sendmail  @recipients = 'recipient_email_address', @message = 'Total Sum of Job ID' , @subject = 'Compute Sum', @width = 133 , @query = 'IF EXISTS (SELECT 1  FROM pubs.dbo.employee WHERE 1=0)  SELECT emp_id, fname, minit, lname, job_id, job_lvl, pub_id FROM pubs.dbo.employee WHERE 1=0 COMPUTE SUM (job_id) ELSE SELECT ''No Data'' as [SUM]'
REFERENCES
Properties

Article ID: 819955 - Last Review: 02/27/2014 21:18:53 - Revision: 9.4

  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000, Workgroup Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
  • kbnosurvey kbarchive kbhotfixserver kbqfe kbqfe kbsqlserv2000presp4fix kbfix kbbug KB819955
Feedback