FIX: SQL Server May Stop Without Any Information by BULK INSERT
This article was previously published under Q249119
This article has been archived. It is offered "as is" and will no longer be updated.
BUG #: 56117 (SQLBUG_70)
If all of the following conditions are true, executing a Transact-SQL BULK INSERT may cause the SQL Server to stop responding or cause a stack overflow or access violation (AV):
- A table has an int data type field and some other data type fields. At least one field follows the int data type field.
- A format file is used.
- The field is defined as the fixed data length in the format file.
- Only the space character is in the data file.
To work around this problem, do any one of the following:
- Make sure a value other than the space character is specified in the data file.
- Use the field terminator in the data file and format file.
- Use the BCP utility instead of BULK INSERT.
Microsoft has confirmed this to be a problem in SQL Server 7.0. This problem has been corrected in U.S. Service Pack 2 for Microsoft SQL Server 7.0. For more information, click the following article number to view the article in the Microsoft Knowledge Base:
254561 INF: How to Obtain Service Pack 2 for Microsoft SQL Server 7.0 and Microsoft Data Engine (MSDE) 1.0For more information, contact your primary support provider.
Steps to Reproduce the ProblemThe following is a case where SQL Server may stop responding without any information:
- Create a data file named Test1.txt containing only two space characters and a <CRLF>.
- Create a format file named Test1.fmt containing the following:
7.0 2 1 SQLCHAR 0 1 "" 1 c1 2 SQLCHAR 0 1 "\r\n" 2 c2
- Execute the following script with Query Analyzer; SQL Server may stop responding without any information:At this time, no information is recorded in the error log.
use tempdbGOcreate table test ( [c1] [int], [c2] [char] (1)) ON [PRIMARY]GOBULK INSERT test FROM 'c:\test1.txt'WITH (FORMATFILE='c:\test1.fmt')GO
- Create a data file named Test2.txt containing 13 space characters and a <CRLF>.
- Create a format file named Test2.fmt containing the following:
7.0 2 1 SQLCHAR 0 12 "" 1 c1 2 SQLCHAR 0 1 "\r\n" 2 c2
- Execute the following script with Query Analyzer; and the stack overflow or AV occurs:
use tempdbGOcreate table test ( [c1] [int], [c2] [char] (1)) ON [PRIMARY]GOBULK INSERT test FROM 'c:\test2.txt'WITH (FORMATFILE='c:\test2.fmt')GO
Article ID: 249119 - Last Review: 11/02/2013 17:48:00 - Revision: 3.0
Microsoft SQL Server 7.0 Standard Edition
- kbnosurvey kbarchive kbbug kbfix KB249119