本文可帮助你解决命令在具有参数的复杂联合查询中返回错误的列长度和数据类型的问题 SQLDescribeCol
。
原始产品版本: SQL Server 2008,Microsoft SQL Server 2005
原始 KB 数: 2900760
概要
请考虑以下方案:
- 使用早于Microsoft SQL Server Native Client 11.0 Microsoft SQL Server Native Client 的版本。
-
SQLDescribeCol
代码对包含参数和 WHERE 子句的复杂联合查询调用函数。
在此方案中, 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 Standard
- Microsoft SQL Server 2005 企业版
- Microsoft SQL Server 2005 标准版