尝试从 MS SQL Server 获取大量数据(列类型为“文本”)

BET*_*SCH 2 sql-server ado.net

我想text从 MS SQL Server 中获取大约 300MB 的数据(列),但是使用我正在使用的库,当我尝试访问该字段时,就会出现内存不足的异常。不幸的是,我绑定了该库,无法切换到其他库。

我尝试使用 获取块SUBSTRING(),但是返回varchar并且最大长度为 8000,因此以 8K 块获取 300MB 将永远花费时间。

还有其他方法可以做到这一点吗?如果我能以 3x 100MB 块的形式获得 300MB 就好了,100MB 似乎不会抛出异常。也许以某种方式分割服务器端的数据?

MS SQL Server 版本为 14.0.3436.1

提前致谢

Dan*_*man 6

我尝试使用 SUBSTRING() 获取块,但返回 varchar 并且最大长度为 8000,因此以 8K 块获取 300MB 将永远花费时间。

SUBSTRING返回不超过 8000 个字符的原因是您使用的是已弃用的text数据类型。相反,用于varchar(MAX)较大的值,这允许使用标准 T-SQL 函数返回较大的值SUBSTRING

text从旧列中以较小的块读取数据的正确方法是使用READTEXT语句。下面是从文档中收集的示例,其中起始位置和长度参数化(整数参数类型)。

DECLARE @ptrval VARBINARY(16);  
SELECT @ptrval = TEXTPTR(pr_info)   
   FROM pub_info pr INNER JOIN publishers p  
      ON pr.pub_id = p.pub_id   
      AND p.pub_name = 'New Moon Books'  
READTEXT pub_info.pr_info @ptrval @StartPosition @Length;
Run Code Online (Sandbox Code Playgroud)

当然,您需要首先获取值的长度,以避免读取超出值的末尾。我假设您的SUBSTRING尝试已经做到了这一点,但这只是一个猜测,没有看到您的代码。