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
提前致谢
我尝试使用 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
尝试已经做到了这一点,但这只是一个猜测,没有看到您的代码。
归档时间: |
|
查看次数: |
1654 次 |
最近记录: |