本文可帮助你解决命令在具有参数的复杂联合查询中返回错误列长度和数据类型的问题 SQLDescribeCol

原始产品版本: SQL Server 2008、Microsoft SQL Server 2005
原始 KB 编号: 2900760

请考虑以下情况:

  • 使用早于 Microsoft SQL Server Native Client 11.0 的 Microsoft SQL Server Native Client版本。
  • 代码对包含参数和 WHERE 子句的复杂联合查询的函数进行调用 SQLDescribeCol
  • 在此方案中, SQLDescribeCol 返回不正确的列长度和数据类型。

    出现此问题的原因是驱动程序截断了 UNION 关键字上元数据的查询。 因此,SQL Server仅请求第一个查询的元数据,并忽略第二个查询。 如果更改查询的顺序,则 SQLDescribeCol 返回正确的数据。

    若要解决此问题,请在应用程序中使用 SQL Server Native Client 11.0 或更高版本。 若要获取 SQL Server Native Client 11.0 或详细信息, 请参阅 Microsoft SQL Server 2012 SP4 功能包

    若要解决此问题,请执行以下任一操作:

  • 将查询编译为使用参数的存储过程。
  • 反转联合查询中语句的 SELECT 顺序,使常量字段位于最后 SELECT 一个语句中。
  • Microsoft 已确认这是早期版本的SQL Server和SQL Server Native Client中的已知问题。

    Microsoft 已确认这是本文开头列出的 Microsoft 产品中的 bug。

  • v R2 Enterprise
  • SQL Server 2008 R2 Datacenter
  • SQL Server 2008 R2 Standard
  • SQL Server 2008 Enterprise
  • SQL Server 2008 标准版
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 标准版
  •