nvarchar(max)列仅在SELECT语句中相互干扰,只能通过ODBC

时间:2013-09-24 19:24:02

标签: select odbc max sqldatatypes nvarchar

在最近的运行时引擎和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个字符的字段。

我的问题:

  1. 与导致此问题的页外数据相关的ODBC的限制是什么。我的理解是nvarchar(max)数据只存储在页外,如果它足够长(我错了)。在我正在使用的示例表中,没有任何文本数据字段超过255个字符,但问题仍然存在。
  2. 如果我能找出哪些字段需要额外的长度并且只将这些字段保留在页外表示中,我可能会过去。但是,应用程序的大小使得确定每个字段时间的确切(和可能)使用是禁止的。我希望我不必走这条路。

0 个答案:

没有答案