在最近更新的运行时引擎和 SQL Server 版本(2008R2 到 2012)中,我开始遇到一个问题,即通过 ODBC 进行的大型查询返回不应该有空白字段的问题。直接在 SQL Server 中运行的相同查询运行良好。
我开始从查询中删除字段,发现是查询中的五个 TEXT 数据类型字段给我带来了麻烦。SELECT 语句中列出的第一个 TEXT 字段会正常显示,而后续的 TEXT 字段将不会显示。如果我从查询中删除了除两个字段之外的所有字段,剩下的两个将通过。
由于问题显然发生在 ODBC 中,我的第一个想法是将我的 windows 8 odbc 驱动程序从“SQL Server Native Client 11.0”切换到“SQL Server”。这没有帮助。
由于 TEXT 即将失去支持,我认为它可能是罪魁祸首。我将所有 TEXT 字段转换为 NVARCHAR(MAX) (我也在寻找 unicode 支持)。这并没有解决任何问题。接下来,我尝试将页外数据类型转换为页内格式 NVARCHAR(4000)。这解决了问题,但它不能全面工作,因为我有一些超过 4000 个字符的字段。
我的问题:
- 与导致此问题的页外数据相关的 ODBC 限制是什么。我的理解是 nvarchar(max) 数据只有在足够长的情况下才会存储在页外(我对此是否错了)。在我正在使用的示例表中,文本数据字段的长度均不超过 255 个字符,但问题仍然存在。
- 如果我能弄清楚哪些字段需要额外的长度并且只将这些字段保留在页外表示中,我可能会过得去。然而,应用程序的大小使得弄清楚每个现场时间的准确(和可能)使用是令人望而却步的。我希望我不必走这条路。