Sql-Server
試圖從 MS SQL Server 獲取大量數據(列類型為“文本”)
我想
text
從 MS SQL Server 中獲取 300MB 的數據(列),但是對於我正在使用的庫,一旦我嘗試訪問該欄位,就會出現記憶體不足的異常。不幸的是,我被綁定到那個庫,不能切換到別的東西。我嘗試使用 獲取塊
SUBSTRING()
,但返回varchar
並且最大 len 為 8000,因此以 8K 的塊獲取 300MB 將需要很長時間。有沒有其他方法可以做到這一點?如果我可以在 3x 100MB 塊中獲得 300MB 就可以了,100MB 似乎不會引發異常。也許以某種方式拆分數據伺服器端?
MS SQL Server 版本是 14.0.3436.1
提前致謝
我嘗試使用 SUBSTRING() 獲取塊,但返回 varchar 並且最大 len 為 8000,因此以 8K 的塊獲取 300MB 將需要很長時間。
SUBSTRING
返回不超過 8000 個字元的原因是因為您使用的是不推薦使用的text
數據類型。改為用於varchar(MAX)
大值,這允許使用標準 T-SQLSUBSTRING
函式返回更大的值。
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;
當然,您需要首先獲取值的長度以避免讀取超出值的末尾。我假設您的
SUBSTRING
嘗試已經這樣做了,但這只是一個猜測,沒有看到您的程式碼。