XPSMTP.DLL
- SQL Server SMTP Mail XP
version:
1.1.0.8
last
updated: 12 August 2002
platform: MSDE, SQL Server 7.0 or 2000 running Windows NT 4.0 and
higher
Content:
Description
Usage
Parameters
Return codes
Installation
Uninstall
Version and platform support
Known limitations
FAQ
Troubleshooting
License
Planned functionality
enhancements
Realized
functionality enhancements
Change log
XPSMTP provides a
SMTP based SQL Mail solution for sending MIME based email over SMTP,
implemented as an Extended Stored Procedure.
It does not require any software to be installed, just a SMTP email
server that can handle the outgoing mail request. XPSMTP is using
TCP/IP sockets to communicate to port 25. XPSMTP does not spawn
additional threads, the xp_smtp_sendmail request is handled on the
same thread as it is being called on by SQL Server. Each call to
xp_smtp_sendmail establishes a connection to the SMTP server and
disconnects when done sending the email. The connection is created
using asynchronous communication and aborts based on a timeout value
(@timeout which by default is 10000 milliseconds, so 10 seconds).
XPSMTP only supports
named parameters, since the number possible of parameters is already
big and will get extended over time and since most of these
parameters are optional, XPSMTP does not support ordinal parameters,
mainly to reduce complexity, ambiguity and the change on mistakes.
--
************************************************************************
-- Begin of sample section
--
************************************************************************
--
************************************************************************
-- minimum number of parameters
--
************************************************************************
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail
@FROM = N'MyEmail@MyDomain.com',
@TO = N'MyFriend@HisDomain.com'
select RC = @rc
go
--
************************************************************************
-- more comprehensive example
--
************************************************************************
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail
@FROM = N'MyEmail@MyDomain.com',
@FROM_NAME = N'Joe Mailman',
@TO = N'MyFriend@HisDomain.com',
@CC = N'MyOtherFriend@HisDomain.com',
@BCC = N'MyEmail@MyDomain.com',
@priority = N'HIGH',
@subject = N'Hello SQL Server SMTP Mail',
@message = N'Goodbye MAPI, goodbye Outlook',
@type = N'text/plain',
@attachments= N'c:\attachment1.txt;c:\attachment2.txt',
@server = N'mail.mydomain.com'
select RC = @rc
go
--
************************************************************************
-- sending HTML mail
--
************************************************************************
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail
@FROM = N'MyEmail@MyDomain.com',
@TO = N'MyFriend@HisDomain.com',
@subject = N'My first HTML mail',
@message = N'<HTML><H1>This is some HTML
content</H1></HTML>',
@type = N'text/html'
select RC = @rc
go
--
************************************************************************
-- sending HTML mail
--
************************************************************************
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail
@FROM = N'MyEmail@MyDomain.com',
@FROM_NAME = N'Joe Mailman',
@TO =
N'MyFriend@HisDomain.com',
@subject = N'ASCII HTML
messagefile',
@type = N'text/html',
@messagefile = N'c:\msg.html'
select RC = @rc
go
--
************************************************************************
-- all possible parameters
--
************************************************************************
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail
@FROM = N'MyEmail@MyDomain.com',
@FROM_NAME = N'My Full Name',
@replyto =
N'MyReplyAddress@MyDomain.com',
@TO = N'MyFriend@HisDomain.com',
@CC = N'',
@BCC = N'',
@priority = N'NORMAL',
@subject = N'Hello SQL Server SMTP Mail',
@type = N'text/plain',
@message = N'Goodbye MAPI, goodbye Outlook',
@messagefile= N'',
@attachment = N'',
@attachments= N'',
@codepage = 0,
@timeout = 10000,
@server = N'mail.mydomain.com'
select RC = @rc
go
--
************************************************************************
-- using variables
--
************************************************************************
declare
@FROM NVARCHAR(4000),
@FROM_NAME NVARCHAR(4000),
@TO NVARCHAR(4000),
@CC NVARCHAR(4000),
@BCC NVARCHAR(4000),
@priority NVARCHAR(10),
@subject NVARCHAR(4000),
@message NVARCHAR(4000),
@type NVARCHAR(100),
@attachments NVARCHAR(4000),
@codepage INT,
@rc INT
select
@FROM = N'MyEmail@MyDomain.com',
@FROM_NAME = N'Joe Mailman',
@TO = N'MyFriend@HisDomain.com',
@CC = N'',
@BCC = N'',
@priority = N'High',
@subject = N'SQL Server SMTP mail',
@message = N'<HTML><H1>Hello SQL Server SMTP SQL
Mail</H1></HTML>',
@type = N'text/html',
@attachments = N'',
@codepage = 0
exec
@rc = master.dbo.xp_smtp_sendmail
@FROM = @FROM,
@TO = @TO,
@CC = @CC,
@BCC = @BCC,
@priority = @priority,
@subject = @subject,
@message = @message,
@type = @type,
@attachments = @attachments,
@codepage = @codepage,
@server = N'mail.sqldev.net'
select
RC = @rc
go
--
************************************************************************
-- using a dumpfile for diagnostics
--
************************************************************************
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail
@FROM = N'MyEmail@MyDomain.com',
@FROM_NAME = N'Joe Mailman',
@TO =
N'MyFriend@HisDomain.com',
@subject = N'ASCII HTML
messagefile',
@type = N'text/html',
@message = N'Hello World',
@dumpmsg = N'C:\TEMP\dumpmsg.log'
select RC = @rc
go
--
************************************************************************
-- ping server
--
************************************************************************
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail
@server = N'mail.sqldev.net',
@port = 25,
@ping = 1
select RC = @rc
go
--
************************************************************************
-- End of sample section
--
************************************************************************
This is the complete list
off parameters used by xp_smtp_sendmail. The parameter names used are
case-insensitive. When a parameter is marked as mandatory (only @FROM
and @TO) this means you have to provide a valid value, all other
parameters are optional. Either because default values are provides,
either because they are really optional in nature.
| Name |
Data types allowed |
Default value |
Mandatory |
Value ranges |
Description |
| @FROM |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Mandatory |
|
Email address of the sender |
| @FROM_NAME |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Optional |
|
Display name of the sender |
| @TO |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Mandatory |
|
Recipients, separated by commas |
| @replyto |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Optional |
|
Reply to email address |
| @CC |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Optional |
|
CC recipients, separated by commas |
| @BCC |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Optional |
|
BCC recipients, separated by commas |
| @priority |
NVARCHAR(10), VARCHAR(10) |
NORMAL |
Optional |
LOW, NORMAL or HIGH |
Priority of the message |
| @subject |
VARCHAR(4000), VARCHAR(8000) |
NULL |
Optional |
|
Subject of the email message |
| @type |
NVARCHAR(100), VARCHAR(100) |
text/plain |
Optional |
text/plain
text/html |
Specifies the message content type as plain text
or HTML |
| @message |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Optional |
|
Body text of the email message. The maximum line
length is 1000 characters. Lines need to be separated using a
carriage return linefeed (\r\n or using T-SQL char(13) |
char(10)). |
| @messagefile |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Optional |
Valid fully qualified file path and name. Size
of file not larger than 64KB |
Pointer to a file which contains the message
text. The file can contain the message text as plain text or in
HTML format. The file can either be ASCII or Unicode. The max.
file size allowed is 64KB. The maximum line length is 1000
characters. Lines need to be separated using a carriage return
linefeed (\r\n or using T-SQL char(13) | char(10)). |
| @attachment |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Optional |
Valid fully qualified file path and name. |
Pointer to file, to be included as attachment of
the email message. |
| @attachments |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Optional |
Valid fully qualified file path and name. |
Pointers to files, to be included as attachments
of the email messages, separated by semicolons (;) |
| @server |
NVARCHAR(4000), VARCHAR(8000) |
smarthost |
Optional |
Valid hostname or IP address pointing an SMTP
mail server |
SMTP server, expressed as hostname or IP
address. By default this is configured as "smarthost". |
| @port |
INT |
25 |
Optional |
Valid socket port number |
Port number for SMTP service, default port 25 |
| @codepage |
INT |
0 |
|
|
Codepage of strings supplied when using ASCII
strings |
| @timeout |
INT |
10000
(=10 secs) |
Optional |
[0 >= WaitForSingleObject] |
Connection timeout in milliseconds |
| @dumpmsg |
NVARCHAR(4000), VARCHAR(8000) |
NULL |
Optional |
Valid fully qualified file path and name. |
Dumps message to dump file.
NOTE: Requires sysadmin role membership |
| @ping |
INT |
NULL |
Optional |
[0 | 1] |
Tries to connect to @server (using @timeout), if
successfuly connected @rc = 0 otherwise @rc = 1. This can be
used to validate connections to the SMTP server |
The procedure returns
only two return codes, 0 (zero) indicating successful execution, 1
indicating failure always accompanied with an error message.
This is how to
retrieve the return code:
declare @rc int
exec master.dbo.xp_smtpsendmail ...
select @rc
To install XPSMTP follow these instructions:
-
For SQL Server 7.0 download
XPSMTP70.ZIP and unzip the files
For SQL Server 2000, download
XPSMTP80.ZIP and unzip the files
-
Copy xpsmtpXX.dll into the SQL Server BINN directory.
For SQL Server 7.0 copy XPSMTP70.DLL, for SQL Server 2000 copy
XPSMTP80.DLL
For SQL Server 7.0 the default installation location is
"C:\MSSQL7\BINN"
For SQL Server 2000 the default location is "C:\Program
Files\Microsoft SQL Server\MSSQL\Binn"
-
Register the extended stored procedure using OSQL or
SQL Query Analyzer by executing:
-- SQL Server 7.0 install
exec sp_addextendedproc 'xp_smtp_sendmail', 'xpsmtp70.dll'
-- SQL Server 2000 install
exec sp_addextendedproc 'xp_smtp_sendmail', 'xpsmtp80.dll'
-
Grant rights to the correct set of users using OSQL or
SQL Query Analyzer by executing:
grant execute on xp_smtp_sendmail to public
By default only the member of the sysadmin role have
execution rights on the XP after it is being registered
To remove XPSMTP from a system follow these instructions:
-
Force the DLL out of memory, using OSQL or SQL Query
Analyzer by executing:
dbcc xpsmtp70(free) -- for SQL Server 7.0
dbcc xpsmtp80(free) -- for SQL Server 2000
-
Unregistered the XP from the system, using OSQL or SQL
Query Analyzer by executing:
exec sp_dropextendedproc 'xp_smtp_sendmail'
-
Delete the XPSMTP70.DLL or XPSMTP80.DLL from the SQL
Server BINN directory
XPSMTP is tested and supported on:
-
SQL Server 2000 (including all available service
packs), running on Windows NT 4.0, Windows 2000 and Windows XP
-
MSDE 2000 (including all available service packs),
running on Windows NT 4.0, Windows 2000 and Windows XP
XPSMTP is supported on:
-
SQL Server 7.0 (including all available service packs),
running on Windows NT 4.0, Windows 2000 and Windows XP
-
MSDE 1.0 (including all available service packs),
running on Windows NT 4.0, Windows 2000 and Windows XP
XPSMTP is NOT supported or tested in any way or
form on:
-
SQL Server 7.0 or 2000 running on Windows 95, Windows
98, Windows 98 Second Edition or Windows Me
-
MSDE 1.0 running on Windows 95, Windows 98, Windows 98
Second Edition or Windows Me
-
MSDE 2000 running on Windows 95, Windows 98, Windows 98
Second Edition or Windows Me
-
SQL Server 7.0 running on the Alpha processor
Note: SQL Server 7.0 and Windows NT 4.0 usage
When using SQL Server 7.0 on Windows NT 4.0, you need to
install Internet Explorer version 5.5 SP1 or higher, otherwise you might
run into the following error message: "The data area passed to a
system call is too small."
-
Q: Which RFC's is XPSMTP based on?
A: The XPSMTP implementation is based on
RFC 821,
RFC 822 and
RFC 2821
-
Q: Does XPSTMP rely on MAPI?
A: XPSMTP does not rely on MAPI or any other Microsoft Outlook or
Outlook Express components.
-
Q: How can I use XPSMTP to test the connection to my
mail server and check for the presence of an SMTP server
A: XPSMTP provides a @ping option, which will try to connect to the
host and port specified and send a SMTP HELO command to the server,
when this is performed succesfully, the return code of the XP is 0
(zero), in case of an error 1 is returned.
Example:
-- ping the default settings
(@server = N'smarthost', @port = 25)
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail @ping = 1
select @rc
-- ping the server using default port
settings (@port = 25)
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail @server = N'mail.sqldev.net',
@ping = 1
select @rc
-- ping server using @server and @port
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail @server = N'mail.sqldev.net',
@port = 25, @ping = 1
select @rc
- Q: Why is an extra carriage return linefeed is inserted every
998th character?

A: XPSMTP uses a maximum line length of 1000 characters, minus two
for storing a carriage return linefeed (\r\n) to terminate the line.
When you are sending a message which contains a line or lines that
are longer then the maximum line length, XPSMTP automatically
inserts a carriage return linefeed (\r\n) before it sends the line
to the SMTP server. If you have embedded carriage return linefeeds
inside your message which occur before the maximum line length of
1000 characters, the string is terminate at that point and send to
the server, in which case no extra carriage return linefeed is
added. The problem occurs when you are using only using line feeds
(\n) without the carriage return (\r) inside your message. So the
workaround is to use carriage return linefeeds (\r\n) instead of
linefeeds (\n). In T-SQL a carriage return linefeed can be
represented using char(13) + char(10). In a future release XPSMTP
will automatically be able to use both \n as a \r\n to terminate
lines before exceeding the maximum line length of a 1000 characters.
-
Sending e-mail, returns the following error:
Error: connecting to server smarthost
This is an indication that you do not have a smarthost defined or
the smarthost entry can not be resolved. The default hostname that
XPSMTP is using for sending e-mail is named "smarthost". To override
this you have to supply the @server parameter, with a valid hostname
pointing to an SMTP server. If the SMTP does not listen on the
default SMTP socket port 25, you can override the used port using
the @port parameter.
To determine if a smarthost defined use ping:
Pinging a undefined "smarthost", will results in:
ping smarthost
Ping request could not find host smarthost. Please check the name
and try again.
Pinging a "smarthost", which can not be reached will
result in:
ping smarthost
Pinging smarthost [192.168.1.201] with
32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 192.168.1.201:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Pinging a "smarthost" which is defined and can be
reached, will result in:
ping smarthost
Pinging smarthost [175.45.9.106] with 32 bytes of data:
Reply from 175.45.9.106: bytes=32 time=72ms TTL=59
Reply from 175.45.9.106: bytes=32 time=95ms TTL=59
Reply from 175.45.9.106: bytes=32 time=119ms TTL=59
Reply from 175.45.9.106: bytes=32 time=76ms TTL=59
Ping statistics for 175.45.9.106:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate
round trip times in milli-seconds:
Minimum = 72ms, Maximum = 119ms, Average = 90ms
For more information with regards to what a smarthost is, see the
FAQ section.
Example:
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail @server =
N'mail.sqldev.net', @from = N'', @to = N'', @subject = 'test'
declare @rc int
exec @rc = master.dbo.xp_smtp_sendmail @server =
N'mail.sqldev.net', @port = 26, @from = N'', @to = N'', @subject =
'test'
-
Sending e-mail to an external e-mail address returns in
the following error:
Server response: 550 5.7.1 Unable to relay for
MyFriend@HisDomain.com
This is an indication that your mail server has not been enabled to
relay, for more information on testing Open Relay check the
following article at
SecWiz
-
Send e-mail using an external message file, return the
following error:
Error: @messagefile "c:\attachments\reports\StatusReport.htm"
file size is larger then allowed max size of 65536 bytes
This is an indication that your message file exceeds the currently
hardcode limit of 64KB, there is no work around for this in the
current release, a future release will remove this limitation.
-
List of general SMTP errors:
| Number |
Description |
| 421 |
<domain> service not available, closing |
| 450 |
request action aborted, local error in
processing |
| 500 |
syntax error, command unrecognized |
| 550 |
requested action not take (mailbox not
found) |
| 551 |
user not local |
| 554 |
transaction failed |
XPSMTP - Copyright ©
SQLDev.Net 1991-2003 (http://SQLDev.Net)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
-
Redistributions of
source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
-
Redistributions in
binary form must reproduce the above copyright notice, this list of
conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
-
Neither the name of
SQLDev.Net nor the names of its contributors may be used to endorse
or promote products derived from this software without specific
prior written permission.
-
Binaries, source code
and any other parts of this distribution may not be incorporated
into any software licensed under the terms of the GNU General Public
License (GPL) or the GNU Lesser Public License (LGPL). Binaries,
source code and any other parts of this distribution
may not be incorporated into any software licensed under any license
requiring source code disclosure of derivative works.
-
Modified
redistributions of source code, binaries and/or documentation must
carry the above copyright as required by clauses (1) and (2) and may
retain the name "SQLDev.Net" in source code, documentation and
metadata.
-
The name "SQLDev.Net"
is a trademark of SQLDev.Net B.V. the Netherlands.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
The next release will
contain the following feature (subject to change):
-
Authentication
support: LOGIN PLAIN, AUTH LOGIN and CRAM MD5
-
Longer @message
support; using text and ntext type parameters
-
Multi part messages;
@message1, @message2,... @message9. Plan is to support maximum 9
message parts, parts are in order based on the name of the
parameter, no based on the order in which the parameters are
supplied in the parameter list.
-
Multi server support:
@server = N'mail.server1.com; mail.server2.com; mail.server3.com'.
Plan is to support maximum 3 servers, which will be used in order,
when one fails, two is used, when two fails, three is used, if three
fails the operation is failed. The servers are not used in a
round-robin fashion so this is no solution for load balancing.
-
Addition of a retry
counter, for retry on failure (plan is to support maximum of 10
retries) (Behavior of @retry in combination with multiple servers is
not yet deteremined.)
-
Configurable maximum
files size, which is currently limited to 64K, int
@messagefile_maxsize overrides the default, when not specified 64K
is still used.
-
Registry based
default configuration. xp_smtp_config can be used to set and
retrieve default values for almost all parameters, like @server,
@from, @from_name, @timeout etc. The additional @allow_overrides
flags determines the behavior of the default values when tried to be
overwritten by the user. False will fail the operation with a
"Error: overwriting default parameter (%s)", true will override the
default value with the provided value
-
Add an output
parameter (@errmsg OUTPUT) which contains the error message in case
of a failure to have better control over the execution and enable to
XP to work in complete silent mode. The parameter would only contain
data if the return code of the XP is not equal to 0 (zero)
indicating some sort of failure.
-
Addition of query
support for emailing query execution results like xp_sendmail does,
where the query result either is attached or is send as the body of
the email message. Supports multiple result sets and output to CSV
and XML. Query support is added using a different XP name,
xp_smtp_sendmail_query to allow security differentiation.
For future release:
-
Query based email,
this will allow for table driven email generation. Idea is to create
a table or view representing the parameters of xp_smtp_sendmail like
this:
create table mailfeed
(
FROM NVARCHAR(4000) NOT NULL,
FROM_NAME NVARCHAR(4000) NULL,
TO NVARCHAR(4000) NOT NULL,
CC NVARCHAR(4000) NULL,
BCC NVARCHAR(4000) NULL,
priority NVARCHAR(10) NULL,
subject NVARCHAR(4000) NULL,
type NVARCHAR(100) NULL,
message NVARCHAR(4000) NULL,
messagefile NVARCHAR(4000) NULL,
attachment NVARCHAR(4000) NULL,
attachments NVARCHAR(4000) NULL,
server NVARCHAR(4000) NULL,
codepage INT NULL,
timeout INT NULL
)
The table or view would supply the values for the parameters, the
scope of the rows used to send email are determined by the
@querymail parameter which contains a query like:
select @querymail = N'select * from
mydb.dbo.mailfeed where extrafield = 1'
All columns that do not match names of parameters or are excluded by
the query will either get the value supplied to xp_smtp_sendmail or
the default value if no value was supplied.
-
Allow attaching open
files like the SQL Server ERRORLOG file
-
E-mail address
validation only execution.
-
S/MIME support
-
Keep socket
connection open between invocations of the XP, to improve execution
performance
-
SQL Server 6.x
support
-
Windows 9x support
-
Configurable
character set and content encoding
-
Other suggestions,
ideas, please send email to
ideas
-
Add configurable SMTP
port support (instead of hard coded port 25)
Added in version 1.1.0.8
-
Support for text/html
MIME encoding besides the current text/plain MIME encoding
Added in version 1.1.0.3
-
Add ability to pass
multiple file attachments (adding @attachments parameter)
Added in version 1.1.0.3
-
Add ability to read
message text from file, to bypass the XP parameter size limit
Added in version 1.1.0.3
| Version |
Date |
Description |
| 1.1.0.8 |
2002-08-12 |
Added @port support |
| 1.1.0.7 |
2002-07-11 |
Adds support for: @ping server, @replyto,
display name handling for @TO, @CC and @BCC, improved HTML mail
and distinct error messages for each error and @dumpmsg =
N'c:\msg.txt' functionality for diagnostics.
Fixed problems: varchar(8000) messages size problem and
recipients concatenation problems |
| 1.1.0.3 |
2002-03-01 |
Adds support for HTML mail via the @type =
'text/html' parameter.
Adds support for passing multiple attachments via the
@attachments parameter.
Adds support for passing the message text via a file instead of
the @message parameter, by the addition of the @messagefile
parameter.
|
| 1.0.0.2 |
2002-02-20 |
Fix for SQL Server 7.0 problem with incorrect
linkage to OPENDS60.DLL causing error 182 during execution. This
fix resulted in the introduction of version specific binaries:
XPSMTP70.DLL and XPSMTP80.DLL.
This fix only affects SQL Server 7.0 users, SQL Server 2000
users do not have to upgrade from version 1.0.0.1 |
| 1.0.0.1 |
2002-02-14 |
First release |
|