Sql-Server

試圖從 MS SQL Server 獲取大量數據(列類型為“文本”)

  • April 28, 2022

我想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嘗試已經這樣做了,但這只是一個猜測,沒有看到您的程式碼。

引用自:https://dba.stackexchange.com/questions/311432