6 Appendix A: Product Behavior

The information in this specification is applicable to the following Microsoft products or supplemental software. References to product versions include updates to those products.

This document specifies version-specific details in the Microsoft .NET Framework. For information about which versions of .NET Framework are available in each released Windows product or as supplemental software, see [MS-NETOD] section 4.

  • Microsoft .NET Framework 1.1

  • Microsoft .NET Framework 2.0

  • Microsoft .NET Framework 4.0

  • Microsoft .NET Framework 4.5

  • Microsoft .NET Framework 4.6

  • Microsoft .NET Framework 4.7

  • Microsoft .NET Framework 4.8

  • Microsoft SQL Server 7.0

  • Microsoft SQL Server 2000

  • Microsoft SQL Server 2005

  • Microsoft SQL Server 2008

  • Microsoft SQL Server 2008 R2

  • Microsoft SQL Server 2012

  • Microsoft SQL Server 2014

  • Microsoft SQL Server 2016

  • Microsoft SQL Server 2017

Exceptions, if any, are noted in this section. If an update version, service pack or Knowledge Base (KB) number appears with a product name, the behavior changed in that update. The new behavior also applies to subsequent updates unless otherwise specified. If a product edition appears with the product version, behavior is different in that product edition.

Unless otherwise specified, any statement of optional behavior in this specification that is prescribed using the terms "SHOULD" or "SHOULD NOT" implies product behavior in accordance with the SHOULD or SHOULD NOT prescription. Unless otherwise specified, the term "MAY" implies that the product does not follow the prescription.

<1> Section 1.3: The following table describes the latest TDS version that is supported by a particular version of Microsoft SQL Server. To determine the earliest TDS version that is supported by a particular SQL Server version, refer to the product documentation.

TDS version

SQL Server version

7.0

SQL Server 7.0

7.1

SQL Server 2000

7.1 Revision 1

SQL Server 2000 SP1

7.2

SQL Server 2005

7.3.A

SQL Server 2008

7.3.B

SQL Server 2008 R2

7.4

SQL Server 2012

SQL Server 2014

SQL Server 2016

SQL Server 2017

The following table describes the TDS versions that are supported by particular versions of the .NET Framework.

TDS version

.NET Framework version

7.0

.NET Framework 1.1

7.1

.NET Framework 1.1

7.1 Revision 1

.NET Framework 1.1

7.2

.NET Framework 2.0

7.3.A

.NET Framework 2.0

.NET Framework 4.0

7.3.B

.NET Framework 2.0

.NET Framework 4.0

7.4

.NET Framework 4.5

.NET Framework 4.6

.NET Framework 4.7

.NET Framework 4.8

<2> Section 2.1: Microsoft Windows Named Pipes in message mode [MSDN-NP]. Please see [MSDN-NamedPipes] for additional information related to Microsoft-specific implementations.

<3> Section 2.1: VIA is supported only by SQL Server 7.0, SQL Server 2000, SQL Server 2005, SQL Server 2008, and SQL Server 2008 R2. This means that VIA will never be the underlying transport protocol if either the server or the client can support TDS version 7.4.

<4> Section 2.2.1.3: Federated authentication is not supported by SQL Server.

<5> Section 2.2.3.1.1:  Only legacy clients that support SQL Server versions that were released prior to SQL Server 7.0 can use Pre-TDS7 Login.

<6> Section 2.2.3.1.1:  Only clients that support SQL Server 7.0 or later can use TDS7 Login.

<7> Section 2.2.3.1.5:  Depending on the message type and provider, such as Microsoft SQL Server Native Client or Microsoft .NET Framework Data Provider for SQL Server, PacketID values start with either 0 or 1, which is an implementation choice. The .NET Framework Data Provider for SQL Server uses 1.

<8> Section 2.2.4.3: Not all pre-SQL Server 7.0 servers support the attention signal by using the message header. The older implementation was for the client to send a 1-byte message (no header) containing "A" by using the out-of-band write.

<9> Section 2.2.5.1.2:  The sorting styles that are used by SQL Server are described in [MSDN-ColSortSty].

<10> Section 2.2.5.1.2: COLLATION represents a collation in SQL Server, as described in [MSDN-Collation]. It can be either a SQL Server collation or a Windows collation.

Version can be of value 0, 1, 2, or 3. A value of 0 denotes collations introduced in SQL Server 2000. A value of 1 denotes collations introduced in SQL Server 2005. A value of 2 denotes collations introduced in SQL Server 2008. A value of 3 denotes collations introduced in SQL Server 2017.

The GetLocaleInfo Windows API can be used to retrieve information about the locale. In particular, querying for the LOCALE_IDEFAULTANSICODEPAGE locale information constant retrieves the code page information for the given locale.

For either collation type, the different comparison flags map to those defined as valid comparison flags for the CompareString Windows API.

However, for SQL collations with non-Unicode data, the SortId is used to derive comparison information flags, such as whether, for a given SortId, a lowercase "a" equals an uppercase "A".

<11> Section 2.2.5.3.1: Query notifications is not supported by SQL Server 7.0 and SQL Server 2000.

<12> Section 2.2.5.3.1: SSBDeployment corresponds to the SQL Server Service Broker deployment version.

<13> Section 2.2.5.4.1: NULLTYPE can be sent to SQL Server (for example, in RPCRequest), but SQL Server never emits NULLTYPE data.

<14> Section 2.2.5.5.3:  When a .NET Framework Data Provider for SQL Server accesses an XML field, the returned data value is encoded in binary XML format [MS-BINXML]. For other providers, the value is sent in Unicode text format.

<15> Section 2.2.5.5.4: Microsoft implementations return an error if a client does send a raw collation within a sql_variant.

<16> Section 2.2.6.3: Federated Authentication and the FEDAUTH token are not supported by SQL Server.

<17> Section 2.2.6.4: The version numbers used by clients are as follows.

SQL Server version

Version sent from client to server

SQL Server 7.0

0x00000070

SQL Server 2000

0x00000071

SQL Server 2000 SP1

0x01000071

SQL Server 2005

0x02000972

SQL Server 2008

0x03000A73

SQL Server 2008 R2

0x03000B73

SQL Server 2012

SQL Server 2014

SQL Server 2016

SQL Server 2017

0x04000074

<18> Section 2.2.6.4:  The value "1" for fByteOrder is supported only by SQL Server 7.0.

<19> Section 2.2.6.4:  SQL Server assumes fFloat to be FLOAT_IEEE_754 and ignores the other settings.

<20> Section 2.2.6.4:  For fODBC, SQL Server returns a value of zero for ROWCOUNT.

<21> Section 2.2.6.4:  For fOLEDB, SQL Server returns a value of zero for ROWCOUNT.

<22> Section 2.2.6.4:  SQL Server implementations do not inspect the fSendYukonBinaryXML bit. When using the .NET Framework Data Provider for SQL Server, the server sends binary XML if the TDS version is 7.2 or later.

<23> Section 2.2.6.4: The FEDAUTH feature extension is not supported by SQL Server.

<24> Section 2.2.6.4: The COLUMNENCRYPTION feature extension is not supported by SQL Server 7.0, SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, and SQL Server 2014.

<25> Section 2.2.6.4: Enclave computations are not supported by SQL Server. Support for this functionality was introduced in the .NET Framework 4.7.2 and is not supported by the .NET Framework 1.1, .NET Framework 2.0, .NET Framework 4.0, .NET Framework 4.5, .NET Framework 4.6, .NET Framework 4.7, and .NET Framework 4.7.1.

<26> Section 2.2.6.4:  The EnclaveType field is not supported by SQL Server. This field was introduced in the .NET Framework 4.7.2 and is not supported by the .NET Framework 1.1, .NET Framework 2.0, .NET Framework 4.0, .NET Framework 4.5, .NET Framework 4.6, .NET Framework 4.7, and .NET Framework 4.7.1.

<27> Section 2.2.6.4: The GLOBALTRANSACTIONS feature extension is not supported by SQL Server.

<28> Section 2.2.6.4: The AZURESQLSUPPORT feature extension is not supported by SQL Server. This feature extension was introduced in .NET Framework 4.7.2 and is not supported by the .NET Framework 1.1, .NET Framework 2.0, .NET Framework 4.0, .NET Framework 4.5, .NET Framework 4.6, .NET Framework 4.7, and .NET Framework 4.7.1.

<29> Section 2.2.6.5: The FEDAUTHREQUIRED payload option token is not supported by SQL Server.

<30> Section 2.2.6.5: In SQL Server 2012, SQL Server 2014, and SQL Server 2016, the server always sends the value 0 for the INSTOPT option when the string specified in the client's INSTOPT option is "MSSQLServer". The reason for this is that "MSSQLServer" is the name of a default instance, and "MSSQLServer" can be provided by the client even in the absence of an explicit instance name. SQL Server 2000, SQL Server 2005, SQL Server 2008, and SQL Server 2008 R2, which support the INSTOPT field, always validate the client-specified string against the server's instance name.

<31> Section 2.2.6.6: The fNoMetaData flag is not supported by SQL Server 2016.

<32> Section 2.2.6.6: The EnclavePackage parameter is not supported by SQL Server. This parameter was introduced in the .NET Framework 4.7.2 and is not supported by .NET Framework 1.1, .NET Framework 2.0, .NET Framework 4.0, .NET Framework 4.5, .NET Framework 4.6, .NET Framework 4.7, and .NET Framework 4.7.1.

<33> Section 2.2.7.1:  ALTMETADATA_TOKEN is supported only by SQL Server 7.0, SQL Server 2000, SQL Server 2005, SQL Server 2008, and SQL Server 2008 R2.

<34> Section 2.2.7.2:  ALTROW_TOKEN is supported only by SQL Server 7.0, SQL Server 2000, SQL Server 2005, SQL Server 2008, and SQL Server 2008 R2.

<35> Section 2.2.7.4: SQL Server 2016 supports the fHidden flag only through a many-to-many result and by connecting via ODBC.

<36> Section 2.2.7.4: The NoMetaData parameter is not supported by SQL Server 2016.

<37> Section 2.2.7.5: The 0x4: DONE_INXACT bit is not set by SQL Server and is reserved for future use.

<38> Section 2.2.7.5: The DONE token is usually sent after login has succeeded. In this case, the negotiated TDS version is known, and the client can determine whether DoneRowCount is LONG or ULONGLONG.

When login fails for any reason, SQL Server might also send an error message followed by a DONE token. In this case, the server has already completed TDS version negotiation and has to send DoneRowCount as LONG or ULONGLONG based on the negotiated TDS version.

However, sometimes the client cannot determine the server TDS version and cannot determine whether LONG or ULONGLONG is expected for DoneRowCount. If the client TDS level is 7.0 or 7.1, DoneRowCount is always LONG. If the client TDS level is 7.2, 7.3.A, 7.3.B, or 7.4, the DoneRowCount can be LONG or ULONGLONG, depending on which version of the server the client is connecting to.

SQL Server Native Client (SNAC) [MSDN-SNAC] and SQLClient use the VERSION option in the Pre-Login Response message to detect whether DoneRowCount is LONG or ULONGLONG. It is ULONGLONG if VERSION in the Pre-Login Response message indicates that the server is SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, or SQL Server 2016. Otherwise, DoneRowCount is LONG.

A third-party implementation has its own logic to detect whether DoneRowCount is LONG or ULONGLONG or to make the client able to handle both LONG and ULONGLONG. In any implementation, before the client performs this task, the server performs TDS version negotiation and determines whether to send LONG or ULONGLONG.

<39> Section 2.2.7.6: The 0x4: DONE_INXACT bit is not set by SQL Server and is reserved for future use.

<40> Section 2.2.7.7: The 0x4: DONE_INXACT bit is not set by SQL Server and is reserved for future use.

<41> Section 2.2.7.8: Type 16: Transaction Manager Address is not used by SQL Server.

<42> Section 2.2.7.9: Numbers less than 20001 are reserved by SQL Server.

<43> Section 2.2.7.9: SQL Server does not raise system errors with severities of 0 through 9.

<44> Section 2.2.7.9: For compatibility reasons, SQL Server converts severity 10 to severity 0 before returning the error information to the calling application.

<45> Section 2.2.7.10: The FEDAUTH feature extension is not supported by SQL Server.

<46> Section 2.2.7.10: The COLUMNENCRYPTION feature extension is not supported by SQL Server 7.0, SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, and SQL Server 2014.

<47> Section 2.2.7.10: Enclave computations are not supported by SQL Server. Support for this feature was introduced in the .NET Framework 4.7.2 and is not supported by the .NET Framework 1.1, .NET Framework 2.0, .NET Framework 4.0, .NET Framework 4.5, .NET Framework 4.6, .NET Framework 4.7, and .NET Framework 4.7.1.

<48> Section 2.2.7.10: The EnclaveType field is not supported by SQL Server. This field was introduced in the .NET Framework 4.7.2 and is not supported by the .NET Framework 1.1, .NET Framework 2.0, .NET Framework 4.0, .NET Framework 4.5, .NET Framework 4.6, .NET Framework 4.7, and .NET Framework 4.7.1.

<49> Section 2.2.7.10: The GLOBALTRANSACTIONS feature extension is not supported by SQL Server.

<50> Section 2.2.7.10: The AZURESQLSUPPORT feature extension is not supported by SQL Server. This feature extension was introduced in .NET Framework 4.7.2 and is not supported by the .NET Framework 1.1, .NET Framework 2.0, .NET Framework 4.0, .NET Framework 4.5, .NET Framework 4.6, .NET Framework 4.7, and .NET Framework 4.7.1.

<51> Section 2.2.7.11: The FEDAUTHINFO token is not supported by SQL Server.

<52> Section 2.2.7.12: Numbers less than 20001 are reserved by SQL Server.

<53> Section 2.2.7.13: The following table shows the values in network transfer format.

SQL Server

Client to server

Server to client

SQL Server 7.0

0x00000070

0x07000000

SQL Server 2000

0x00000071

0x07010000

SQL Server 2000 SP1

0x01000071

0x71000001

SQL Server 2005

0x02000972

0x72090002

SQL Server 2008*

0x03000A73

0x730A0003

SQL Server 2008 R2

0x03000B73

0x730B0003

SQL Server 2012

SQL Server 2014

SQL Server 2016

SQL Server 2017

0x04000074

0x74000004

*SQL Server 2008 TDS version 0x03000A73 does not include support for NBCROW and fSparseColumnSet.

<54> Section 3.2.2: In Microsoft implementations, the default value for the Microsoft/Windows Data Access Components (MDAC/WDAC) and SNAC Client Request Timers is zero, which is interpreted as no timeout. For a SqlClient Client Request, the default value is 30 seconds. For a description of the data access drivers, see [MSDN-MDAC].

<55> Section 3.2.2: In Microsoft implementations, the default setting for MDAC/WDAC and SNAC Cancel Timer values is 120 seconds. For a SqlClient Cancel Timer, the default value is 5 seconds. For a description of the data access drivers, see [MSDN-MDAC].