none
[MS-TDS] TDS Version numbers and their interpretation RRS feed

  • Question

  • Appendix A: Windows Behavior (page 127) contains, under <8>, a list of "version numbers used by clients up to SQL Server 2008".
    1. The SQL Server version "2008" appears twice in the list. What does this mean?
    2. The list appears to map "SQL Server" versions to TDSVersion (as defined in 2.2.6.3) It would seem more useful/appropriate (since this is "Windows Behavior") to document which Windows versions (or .Net Framework versions) send which TDSVersion values to the server.
    (page 129), under <43>, there is a table of version numbers
    1. Is this table intended to have a row (or 2 rows) for SQL Server 2008?
    2. Is it intentional/correct that the values sent from server to client for SQL Server 7.0 and 2000 are not a simple re-ordering of those sent from client to server? The values listed appear inconsistent with the example shown on page 82.
    (page number references are to version 1.4 of the spec)
    Thursday, December 4, 2008 5:13 PM

Answers

  •  

    Paul Betteridge,

     

    In regards to your question in document [MS-TDS].pdf (Tabular Data Stream Protocol Specification) about TDS Version numbers sent over the wire, the values contained on page 129 are correct. However, the example on page 82 is incorrect. Below is the table you should be following:

     

    SQL Server

    Client to server

    Server to client

    7.0

    0x00000070

    0x07000000

    2000

    0x00000071

    0x07010000

    2000 SP1

    0x01000071

    0x71000001

    2005

    0x02000972

    0x72090002

     

    Note: This is the same table found on Page 129 (<43> Section 2.2.7.11)

     

    Dominic Salemno

    SENIOR SUPPORT ESCALATION ENGINEER
    Tuesday, December 23, 2008 9:11 PM

All replies

  • Hi Paul,


    Thanks for your post.

    Someone from the Protocols Documentation team wil respond to your questions promptly.

    Regards,

    SEBASTIAN CANEVARI - MSFT Senior SEE Protocol Documentation Team
    Friday, December 5, 2008 2:59 PM
  •  

    Hello Paul,

     

    I have reviewed the document [MS-TDS] Tabular Data Stream Protocol Specification at, http://msdn.microsoft.com/en-us/library/cc448435.aspx, and have answers pertaining to your questions inline…

     

     

    Appendix A: Windows Behavior (page 127) contains, under <8>, a list of "version numbers used by clients up to SQL Server 2008".

     

    The SQL Server version "2008" appears twice in the list. What does this mean?

    [Mark Miller_DSC] This is correct, however, it could be made more clear and I will inquire about changing the specification to include the distinction between 0x0A and 0x0B, as follows:

    .Net Framework 3.5 released after Orcas RTM is on 0x0A TDS level. SQL Server 2008 released after CTP6 (including RC0 and RTM) is on 0x0B TDS level.

     

    The list appears to map "SQL Server" versions to TDSVersion (as defined in 2.2.6.3) It would seem more useful/appropriate (since this is "Windows Behavior") to document which Windows versions (or .Net Framework versions) send which TDSVersion values to the server.

    [Mark Miller_DSC] Essentially, SQL Server is not concerned with the client OS or Framework but specifically the TDS version.  It is more accurate, and necessary, to send the actual TDS Version to SQL Server, since TDS changes may occur with every release of SQL Server.

     

    (page 129), under <43>, there is a table of version numbers

     

    Is this table intended to have a row (or 2 rows) for SQL Server 2008?

    [Mark Miller_DSC] I will inquire about changing this in the specification document so it matches what is detailed on page 127, which includes SQL 2008.

     

    Is it intentional/correct that the values sent from server to client for SQL Server 7.0 and 2000 are not a simple re-ordering of those sent from client to server? The values listed appear inconsistent with the example shown on page 82.

    (page number references are to version 1.4 of the spec)

    [Mark Miller_DSC] Could you please clarify?  I am not sure I understand what you are referring to as being inconsistent.

    Regards,
    Mark Miller, US-CSS DSC PROTOCOL TEAM

     

    Monday, December 8, 2008 2:10 PM
  • Hello Mark

    Thank you for those helpful clarifications.

    My point:

    "The list appears to map "SQL Server" versions to TDSVersion (as defined in 2.2.6.3) It would seem more useful/appropriate (since this is "Windows Behavior") to document which Windows versions (or .Net Framework versions) send which TDSVersion values to the server."

    really referred to the approach you have had to take to explain the two TDS sublevels: it is a .NET framework version that determines this. It seems to me that all the versions used on clients are actually identified by some Windows (for ADO) or .Net  Framework (for ADO.Net) version. The server behaviour is obviously linked to a particular SQL Server version. The version the client uses (which is what item <8> is about) is determined by the Windows or .Net version the client software comes from.

    I'm sorry I didn't make my final question clearer: for SQL Server 2005 (for example), the "Client to Server" and "Server to Client" values in the table are the same sequence of bytes, but in the opposite order - so 0x02 00 09 72 from client to server becomes 0x72 09 00 02 when sent from server to client. The values shown in the table do not follow this rule for the first two rows however. My question is then: for a SQL Server 7.0 server, does it send 0x07000000 (as documented in MS-TDS) or 0x70000000, as might be expected by reversing the byte sequence sent from client-to-server; similarly, for SQL Server 2000, is the server-to-client version 0x07010000 as documented, or the sequence 0x71000000, as might be expected by reversing the client-to-server version?

    Paul Betteridge
    Monday, December 8, 2008 4:00 PM
  •  

    Paul Betteridge,

     

    In regards to your question in document [MS-TDS].pdf (Tabular Data Stream Protocol Specification) about TDS Version numbers sent over the wire, the values contained on page 129 are correct. However, the example on page 82 is incorrect. Below is the table you should be following:

     

    SQL Server

    Client to server

    Server to client

    7.0

    0x00000070

    0x07000000

    2000

    0x00000071

    0x07010000

    2000 SP1

    0x01000071

    0x71000001

    2005

    0x02000972

    0x72090002

     

    Note: This is the same table found on Page 129 (<43> Section 2.2.7.11)

     

    Dominic Salemno

    SENIOR SUPPORT ESCALATION ENGINEER
    Tuesday, December 23, 2008 9:11 PM