Microsoft KB Archive/108144: Difference between revisions
m (Text replacement - "<" to "<") |
m (Text replacement - "[[Q" to "[[../") |
||
(2 intermediate revisions by the same user not shown) | |||
Line 34: | Line 34: | ||
A column name in SQL Server may legally have up to 30 characters. However, if a column name is exactly 30 characters long, a select into a temporary table with the column will generate error 103: | A column name in SQL Server may legally have up to 30 characters. However, if a column name is exactly 30 characters long, a select into a temporary table with the column will generate error 103: | ||
<pre> The identifier that starts with <column name | <pre> The identifier that starts with <column name> is too long. Maximum | ||
length is 30 characters. | length is 30 characters. | ||
</pre> | </pre> | ||
Line 318: | Line 318: | ||
ARTICLE ID: '''[[../ | ARTICLE ID: '''\[\[..\/\|Q\]\]''' BUG# OS/2: 1597 (4.2) | ||
'''SYMPTOMS'''<br /> | '''SYMPTOMS'''<br /> | ||
Line 346: | Line 346: | ||
<pre> SELECT DISTINCT A.col1 | <pre> SELECT DISTINCT A.col1 | ||
FROM tab A | FROM tab A | ||
WHERE 0 < | WHERE 0 <> (SELECT SUM(col2)+SUM(col3) | ||
FROM tab B | FROM tab B | ||
WHERE A.col1=B.col1) | WHERE A.col1=B.col1) | ||
Line 352: | Line 352: | ||
SELECT DISTINCT A.col1 | SELECT DISTINCT A.col1 | ||
FROM tab A | FROM tab A | ||
WHERE 0 < | WHERE 0 <> (SELECT SUM(col2)+SUM(col3) | ||
FROM tab B | FROM tab B | ||
WHERE A.col1=B.col1) | WHERE A.col1=B.col1) | ||
Line 361: | Line 361: | ||
<pre> Subquery returned more than 1 value. This is illegal when the | <pre> Subquery returned more than 1 value. This is illegal when the | ||
subquery follows =, !=, <, <=, | subquery follows =, !=, <, <=, >, >=, or when the subquery is used | ||
as an expression | as an expression | ||
</pre> | </pre> | ||
Line 593: | Line 593: | ||
<pre> Data size mismatch occurred while checking TEXT/IMAGE values. The | <pre> Data size mismatch occurred while checking TEXT/IMAGE values. The | ||
first page for this value is: <page # | first page for this value is: <page #>. There were xxx bytes found, | ||
which is different from the expected data length of 0 bytes. | which is different from the expected data length of 0 bytes. | ||
(Msg 7902, Level 16, State 1) | (Msg 7902, Level 16, State 1) | ||
Line 770: | Line 770: | ||
ARTICLE ID: '''[[ | ARTICLE ID: '''[[../100088|Q100088]]''' BUG# OS/2: 1713 (4.2a) | ||
'''SYMPTOMS'''<br /> | '''SYMPTOMS'''<br /> | ||
Line 829: | Line 829: | ||
ARTICLE ID: '''[[ | ARTICLE ID: '''[[../102416|Q102416]]''' BUG# OS/2: 1727 (4.2) | ||
'''SYMPTOMS'''<br /> | '''SYMPTOMS'''<br /> | ||
Line 852: | Line 852: | ||
ARTICLE ID: '''[[ | ARTICLE ID: '''[[../102417|Q102417]]''' BUG# OS/2: 1729 (4.2) | ||
'''SYMPTOMS'''<br /> | '''SYMPTOMS'''<br /> | ||
Line 871: | Line 871: | ||
ARTICLE ID: '''[[ | ARTICLE ID: '''[[../104785|Q104785]]''' BUG# OS/2: 1730 (4.2) | ||
'''SYMPTOMS'''<br /> | '''SYMPTOMS'''<br /> | ||
Line 894: | Line 894: | ||
ARTICLE ID: '''[[ | ARTICLE ID: '''[[../101883|Q101883]]''' BUG# OS/2: 1734 (4.2) | ||
'''SYMPTOMS'''<br /> | '''SYMPTOMS'''<br /> | ||
Line 930: | Line 930: | ||
ARTICLE ID: '''[[ | ARTICLE ID: '''[[../104117|Q104117]]''' BUG# OS/2: 1741 (4.2) and 1740 (1.11) | ||
'''SYMPTOMS'''<br /> | '''SYMPTOMS'''<br /> | ||
Line 937: | Line 937: | ||
Loading a transaction log dump may fail with the following 4305 error: | Loading a transaction log dump may fail with the following 4305 error: | ||
<pre> Specified file <dump file | <pre> Specified file <dump file> is out of sequence. Current time stamp | ||
is <date/time 1 | is <date/time 1> while dump was from <date/time 2>. | ||
(Msg 4305, Level 16, State 1) | (Msg 4305, Level 16, State 1) | ||
</pre> | </pre> | ||
Line 953: | Line 953: | ||
ARTICLE ID: '''[[ | ARTICLE ID: '''[[../104101|Q104101]]''' BUG# OS/2: 1755 (4.2) | ||
'''SYMPTOMS'''<br /> | '''SYMPTOMS'''<br /> | ||
Line 968: | Line 968: | ||
ARTICLE ID: '''[[ | ARTICLE ID: '''[[../95132|Q95132]]''' BUG# OS/2: 1591 (4.2) | ||
'''SYMPTOMS'''<br /> | '''SYMPTOMS'''<br /> | ||
Line 983: | Line 983: | ||
ARTICLE ID: '''[[ | ARTICLE ID: '''[[../95561|Q95561]]''' BUG# OS/2: 1574 (4.2) | ||
'''SYMPTOMS'''<br /> | '''SYMPTOMS'''<br /> | ||
Line 1,008: | Line 1,008: | ||
A query that uses the highest key value of an index runs very slowly. Using showplan indicates that the optimizer is not using the index when it should, or using it when it should not. | A query that uses the highest key value of an index runs very slowly. Using showplan indicates that the optimizer is not using the index when it should, or using it when it should not. | ||
This only happens when the high value is used in a greater than comparison ( | This only happens when the high value is used in a greater than comparison (>), or in the high value of a between statement. Using the highest key in an equality test (=), or a value one above or below will show the index being used correctly. | ||
'''CAUSE'''<br /> | '''CAUSE'''<br /> | ||
Line 1,034: | Line 1,034: | ||
<pre> insert optim values (@counter, 'some text') | <pre> insert optim values (@counter, 'some text') | ||
select @counter=@counter + 1</pre> | select @counter=@counter + 1</pre> | ||
end go create nonclustered index number_index on optim (number) go set showplan on set statistics io on go select * from optim where number | end go create nonclustered index number_index on optim (number) go set showplan on set statistics io on go select * from optim where number > 766 go select * from optim where number > 767 go select * from optim where number > 768 go | ||
<pre>/* Remove the noexec on if you want to see the io */ | <pre>/* Remove the noexec on if you want to see the io */ | ||
/* counts, but at least you will get to see the plan */ | /* counts, but at least you will get to see the plan */ |
Latest revision as of 14:20, 21 July 2020
FIX: SQL Server FixList for Version 4.20bArticle ID: Q108144 - Microsoft SQL Server version 4.2b for OS/2 The following is a list of fixes and other various improvements that have been made in SQL Server version 4.2b. Version 4.2b includes server patches K6 through K11. SQL Server version 4.2b is now available from your primary support provider. For more information, contact your primary support provider. Please note that workarounds have been provided for your information only. It is not necessary to implement these workarounds if you have the updated software. List of Problems Corrected in 4.20aK6:
Description of Problems Corrected in 4.20aK6:
SYMPTOMS
The identifier that starts with <column name> is too long. Maximum length is 30 characters. For example, the following will generate a 103 error: create table longname (abcdefghijklmnopqrstuvwxyz1234 char(4)) go select abcdefghijklmnopqrstuvwxyz1234 = '1234' into #temptab from longname go CAUSE SQL Server does not correctly identify a column name as legal if the column name is 30 characters long and referenced in a SELECT INTO statement that is selecting data into a temporary table. WORKAROUND
create table #temptab (abcdefghijklmnopqrstuvwxyz1234 char(4)) go insert #temptab select abcdefghijklmnopqrstuvwxyz1234 from longname FIX: SELECT CONVERT(char(1), STUFF(,1,0,NULL)) GP Faults
SYMPTOMS
SELECT CONVERT(char(1), STUFF('',1,0,NULL)) CAUSE SQL Server 4.2a does not handle the NULL correctly in this convert statement. FIX: Executing Stored Procedure Gives Error 707
SYMPTOMS
system error detected when trying to free memory at address 0x%lx or a protection violation may occur.
WORKAROUND
Problem Corrected in 4.20aK7:
Description of Problem Corrected in 4.20aK7:
FIX: System Cannot Be Restarted with a Full Master..Syslogs
SYMPTOMS
CAUSE
WORKAROUND
Starting with version 4.2aK7, SQL Server will complete its startup under these conditions. The sa user can then dump transaction master with no log to create space in the master..syslogs table. List of Problems Corrected in 4.20aK8:
Description of Problems Corrected in 4.20aK8:
SYMPTOMS
The following is a sample query: create table t1(c int) create table t2(c int) insert t1 values(1) insert t2 values(1) go create view v (c, av) as select t1.c, avg(t1.c) from t1,t2 where t1.c=t2.c group by t1.c go create table t3(c1 int, c2 int) /* Note c2 is int */ insert t3 select * from v /* Insert AVG() result */ go /* into int column */ CAUSE SQL Server incorrectly handles the automatic type conversions when using a view to insert into a table. Note that column c2 in table t3 is defined as int, but the result of AVG() should be float. The problem occurs when trying to insert the result of AVG() into the int column. WORKAROUND The workaround is to declare the column that receives the AVG() result as a float. In the sample query, if you declare column c2 in table t3 as a float, the problem goes away. FIX: Insert with LIKE and ORDER BY from System Tables
SYMPTOMS
For example, the following SELECT statement causes a GP fault: DECLARE @t varchar(255) SELECT @t="AAA"+name FROM master..sysobjects WHERE name LIKE "syso%" ORDER BY name GO CAUSE SQL Server handles the insertion incorrectly when it inserts a value coming from a column value into a local variable while it is using the LIKE operator and the ORDER BY clause to obtain the value from certain system tables in the master database. WORKAROUND
FIX: Select from a View with Recreated Tables May GP Fault
SYMPTOMS
For example, assume the view is defined as: create table A (id char(5)) create table B (id char(5)) create table C (id char(5)) go create view V as select A.id from A,B,C where A.id=B.id and A.id=C.id go If table C is dropped and recreated again after the view is defined (which is allowed), the query: select * from V will cause SQL Server to GP fault.
CAUSE
WORKAROUND
List of Problems Corrected in 4.20aK9:
Description of Problems Corrected in 4.20aK9:
SYMPTOMS
Updated or inserted row is bigger than the maximum size allowed for this table. (Msg 511, Level 16, State 2) For example, if you create a table with 127 varchar(255) columns, the table will be created without any problems, but you will get the above error when you attempt to insert the row. A look at the row in sysindexes for the table will show a negative number for maxlen field. WORKAROUND
FIX: STR() Function with Length of 255 Causes GP Fault
SYMPTOMS
CAUSE
select STR(0.1, 255, 5) go If a length of less than 255 is used, the query works properly.
FIX: Negative DPAGES May Cause an INSERT/SELECT to GP Fault
SYMPTOMS
INSERT tableA SELECT colA1 FROM tableA A, tableB B WHERE A.colA1 = B.colB1 NOTE: The above query causes a GP fault only if the DPAGES column in SYSINDEXES for tableA is negative.
WORKAROUND
FIX: Client Not Notified when Locks Are Exceeded
SYMPTOMS
SQL Server has run out of LOCKS. Re-run your command when there are fewer active users, or ask your System Administrator to reconfigure SQL Server with more LOCKS. (Msg 1204, Level 19, State 1) CAUSE SQL Server incorrectly handles the out of locks condition, and rather than sending the 1204 error to both the client and the SQL Server ERRORLOG, it only sends it to the ERRORLOG. FIX: UNION of Two SELECTs with Subqueries May Cause GP Fault
SYMPTOMS
SELECT DISTINCT A.col1 FROM tab A WHERE 0 <> (SELECT SUM(col2)+SUM(col3) FROM tab B WHERE A.col1=B.col1) UNION SELECT DISTINCT A.col1 FROM tab A WHERE 0 <> (SELECT SUM(col2)+SUM(col3) FROM tab B WHERE A.col1=B.col1) MORE INFORMATION The problem occurs when the subquery returns more than one row. In that case, SQL Server should raise error message 512: Subquery returned more than 1 value. This is illegal when the subquery follows =, !=, <, <=, >, >=, or when the subquery is used as an expression and terminate the query instead of attempting to evaluate the second SELECT involved in the UNION.
FIX: Uninitialized Variables in Empty Trigger Causes Trap
SYMPTOMS
After the trap occurs on the server, the client connections will be lost. PSTAT indicates that SQLSERVR.EXE is still running but all other attempts to log into SQL Server will fail until the process executing SQLSERVR.EXE is stopped and then SQL Server is restarted. WORKAROUND
FIX: CONVERT() Does Not Handle Styles 13 and 113 Correctly
SYMPTOMS
CAUSE
DD MMM YYYY hh:mi:ss:mmmm(24h) However, style 13 comes out with the month as a number and the year as only the last two digits: DD MM YY hh:mi:ss:mmmm(24h) and style 113 comes out with the month as a number: DD MM YYYY hh:mi:ss:mmmm(24h) FIX: 511 on SELECT INTO with over 127 varchar(255)
SYMPTOMS
Error 511: Updated or inserted row is bigger than maximum size (-nnnnn) allowed for this table. (Where -nnnnn is a large negative number.) Assuming a table named "bigtab" has been defined with more than 127 varchar(255) columns, the following SELECT will get the 511 error: select * into newtab from bigtab The table newtab will have been created and is fully functional, but no data rows will have been inserted.
WORKAROUND
insert newtab select * from bigtab List of Problems Corrected in 4.20aK10:
Description of Problems Corrected in 4.20aK10:
SYMPTOMS
SELECT C.col1 FROM tab1 C, tab1 P WHERE P.col1 = C.col1 and P.col2 = C.col5 and P.col3 = ( SELECT max(col3) FROM tab1 WHERE col2 = C.col5 ) The query causes a GP Fault only if there is a clustered index on table tab1 which includes col2 as one of the indexed columns.
WORKAROUND
FIX: SELECT INTO Variable and Table May Trap Server
SYMPTOMS
The following example traps the server: declare @db_num smallint select @db_num = max(dbid) into #temp from sysdatabases WORKAROUND The above syntax is invalid. The same effect can be achieved by using either of the following two sets of statements: declare @db_num smallint select @db_num = max(dbid) from sysdatabases or select max(dbid) into #temp from sysdatabases If you want to assign to a variable and send data to a new table, use both statements.
FIX: Incorrect Error Message if Device Unavailable
SYMPTOMS
Device '%. *s' (with physical name '%. *s', and virtual device number %d) has not been correctly activated at startup time. Please contact the System Administrator. Instead SQL Server issues error 822: Could not start I/O for request %S_BLKIOPTR. This condition usually occurs if the device's .DAT file is deleted while SQL Server is not running. If the .DAT file resides on a network file server, it may occur if the SQL Server server loses its connection to the file server.
FIX: Join and Ordering of Bit and Text Results Traps Server
SYMPTOMS
CAUSE
WORKAROUND
FIX: Store Procedure with UNION and ORDER BY Causes Errors
SYMPTOMS
Internal error -- Unable to open table at query execution time. (Msg 202, Level 11, State 1). A transaction begun in this stored procedure that did updates in tempdb is still active. This will cause a corruption of tempdb that will exist until the server is rebooted. All BEGIN TRANs must have matching COMMITs or ROLLBACKs. (Msg 277, Level 16, State 1). Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRAN is missing. Previous count = 0, Current count = 1. (Msg 266, Level 16, State 1). Message 611 may also be sent to the errorlog: Attempt made to end a transaction that is idle or in the middle of an update After one of these messages is generated, the transaction count is increased by one and issuing a COMMIT TRAN terminates the front end while issuing a ROLLBACK that causes the server to GP Fault. For example, the following stored procedure will exhibit the problem: create procedure testproc as select * into #work from authors union select * from authors order by address go execute testproc WORKAROUND As a workaround, you can avoid the use of a UNION clause by using the temporary table created by the first SELECT clause to insert the results from the second SELECT clause. Finally, you can retrieve results from the temporary table using SELECT and ORDER BY clauses, like: create proc testproc as select * into #work from authors insert #work select * from authors select * from #work order by address go execute testproc FIX: Uncommitted WRITETEXT May Cause 7902 Error
SYMPTOMS
Data size mismatch occurred while checking TEXT/IMAGE values. The first page for this value is: <page #>. There were xxx bytes found, which is different from the expected data length of 0 bytes. (Msg 7902, Level 16, State 1) CAUSE For this error to occur, a text column must first be updated and the text value set to NULL. Then, a WRITETEXT command is issued within a transaction to insert data into the text column which was just previously set to NULL. If that transaction is then rolled back, SQL Server does not correctly initializes the text length back to 0 bytes, and a DBCC CHECKTABLE or CHECKDB will report the 7902 error. WORKAROUND
- DELETE the offending row. - UPDATE the row and set the text column to NULL. - Issue an INSERT or WRITETEXT to insert new data into the text column. FIX: Network Error During RPC May Hang New Connections
SYMPTOMS
This problem can be replicated by disconnecting the network between two machines that have active site handlers. Initiate another RPC (such as server2...sp_who) and wait for the error to be reported. Now log in to the SQL Server that originated the RPC. If you are able to log in, log out and try again. Existing connections should be OK, however, every attempt to log in to the SQL Server should not respond. WORKAROUND
List of Problems Corrected in 4.20aK11:
Description of Problems Corrected in 4.20aK11:
SYMPTOMS
The following query causes the trap: select t1.c1 from t1,t2 where t1.c50=t2.c51 and 1=2 CAUSE SQL Server does not handle large table joins with 1=2 in the WHERE clause correctly. WORKAROUND
FIX: Multiple Procedures in Transaction Causes GP Fault
SYMPTOMS
Warning: OPEN OBJECTS parameter may be too low; attempt was made to free up descriptors in localdes(). Run sp_configure to increase parameter value. CAUSE SQL Server incorrectly handles the execution of stored procedures that do updates within a user-defined transaction when the value of open objects is low. WORKAROUND
FIX: 803 Error on Select Based Insert
SYMPTOMS
Unable to place buffer 0x%ld holding logical page %ld in sdes for object '%s' - either there is no room in sdes or buffer already in requested slot. Under rare circumstances, an insert of the form: insert table803 select * from source_table on a table with two or more non-clustered indexes can result in an 803 error. This error is very dependent on the data in the indexes at the time the operation is attempted.
WORKAROUND
FIX: SELECT Local Variable with FOR BROWSE Drops Connection
SYMPTOMS
10008 Bad Token This only happens when a unique index exists on the table being selected from. For example: DECLARE @ordnum int SELECT @ordnum = OrderNumber FROM SaleOrder WHERE OrderNumber = 1 FOR BROWSE WORKAROUND Do not use the FOR BROWSE clause in a Transact SQL statement when values are being selected into local variables. The FOR BROWSE clause is designed to be used with DB-Library applications, and is not designed to be used in cases like this. FIX: Clients Hang Issuing Concurrent WRITETEXTs
SYMPTOMS
CAUSE
FIX: SELECT INTO with Outer Join Can Trap Server
SYMPTOMS
A protection violation has occurred. The minimum conditions required for replication are the following:
Following is a minimal example of the table structures and query required to trap the server. You will need to have at least 580 rows of data in t1 to replicate the error. /*****************************************************/ /* Set up the two tables */ /*****************************************************/ use pubs go drop table t1 go create table t1 (c1 char(2) null, c2 varchar(10) null, c3 varchar(10) null) go drop table t2 go create table t2 (c4 char(2), c5 money) go /**************************************************/ /* The query */ /**************************************************/ /* Need to insert data or query will not crash. */ select c2, c3, c5 into #temp_snapshot from t1, t2 where t1.c1 *= t2.c4 group by c2, c3, c5 go FIX: Update Trigger Fails After Upgrading to 4.20K8
SYMPTOMS
Invalid column name ''. (Msg 207, Level 16, State 3). Invalid column name ''. (Msg 207, Level 16, State 3). Invalid column name ''. (Msg 207, Level 16, State 3). The column names contain indecipherable characters. This can also happen if a dump made on a server running a version earlier than 4.20k8 is loaded into a server running 4.20k8.
WORKAROUND
FIX: Insert Into View Causes GP Fault
SYMPTOMS
WORKAROUND Make sure you recreate all underlying tables before an INSERT into a view. FIX: RPC Uses Case Sensitive Passwords
SYMPTOMS
7221, Login to site server2 failed. Other logins on the same server, however, can use the same RPC with no problems.
CAUSE
WORKAROUND
FIX: String Functions for Char Datatype in a View
SYMPTOMS
char datatype column of a View returns the result as padded with blanks to be 256 character in length. Datalength function does return correct length. This does not happen for varchar datatype column in the view. Using the base table instead of the view also returns correct results. For example, in the following script, function RTRIM returns results padded with blanks to be 256 characters in length. create table T1 (textdat char(30)) go insert into T1 (textdat) values ('a') insert into T1 (textdat) values ('ab') go create view VT1 (textdat) as select textdat from T1 go select rtrim(textdat) from VT1 /* incorrect */ go WORKAROUND Note that the problem does not occur on the varchar datatype columns in a view. Therefore, you may modify your view creation statement as: create view VT1 (textdat) as select convert(varchar(30),textdat) from T1 This causes the results to be correctly returned for the string functions. Alternately, you can also convert the char value to a varchar before applying the rtrim or other string functions; for example: select rtrim(convert(varchar(30),textdat)) from VT1 FIX: Error 4305 Loading Log Dump
SYMPTOMS
Specified file <dump file> is out of sequence. Current time stamp is <date/time 1> while dump was from <date/time 2>. (Msg 4305, Level 16, State 1) CAUSE SQL Server incorrectly allows a DUMP TRANsaction command to be issued while inside a user-defined transaction. If after dumping the transaction log, the user-defined transaction is rolled back, any attempt to later load that transaction log dump will fail with the 3305 error. WORKAROUND
FIX: Trap on Insert with Select Union on Same Table
SYMPTOMS
create table testtrap (cola int) go insert testtrap select * from testtrap union select * from testtrap FIX: SHOWPLAN ON and SELECT INTO Involving UNION
SYMPTOMS
WORKAROUND
FIX: Dividing by Negative Money Value Causes Timeslice Error
SYMPTOMS
timeslice -1501, current process infected. SQL Server will temporarily lock up until the timeslice is detected. At that time, the process is terminated and SQL Server resumes as normal. Note: Timeslice errors may cause SQL Server version 1.11 to general protection fault (GP fault) (bug# 1574/1575).
CAUSE
FIX: Index Incorrectly Chosen when Highest Key Value Used
SYMPTOMS
This only happens when the high value is used in a greater than comparison (>), or in the high value of a between statement. Using the highest key in an equality test (=), or a value one above or below will show the index being used correctly. CAUSE
If the highest key value is used as the high value in a between statement, the optimizer will incorrectly use an index when it should do a table scan. Using the index, in this case, causes more page I/Os to be performed than would be in a table scan, causing the query to run much longer than it should. WORKAROUND
MORE INFORMATION
use pubs go create table optim ( number int not null, filler char(10) not null) go declare @counter int select @counter=1 while @counter < 768 begin insert optim values (@counter, 'some text') select @counter=@counter + 1 end go create nonclustered index number_index on optim (number) go set showplan on set statistics io on go select * from optim where number > 766 go select * from optim where number > 767 go select * from optim where number > 768 go /* Remove the noexec on if you want to see the io */ /* counts, but at least you will get to see the plan */ /* without getting 70 rows back. */ set noexec on go select * from optim where number between 700 and 766 go select * from optim where number between 700 and 767 go select * from optim where number between 700 and 768 go set noexec off go set showplan off set statistics io off drop table optim go
FIX: INSERT INTO a Temporary Table Can Cause GP Fault
SYMPTOMS
CAUSE
- The INSERT INTO the temporary table must be within a stored procedure. - You must be inserting into the temporary table using a SELECT statement that returns at least part of the temporary table in question. - It will only occur with specific datasets. |
Additional query words:
Keywords : SSrvGen kbfixlist
Version : 4.2b
Platform : OS/2
Issue type : kbref
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
©1997 Microsoft Corporation. All rights reserved. Legal Notices.