Sql-Server

SSMS - Openrowset 最大文件大小

  • February 25, 2020

抱歉,如果這已在其他地方得到回答,但我在這里或網上找不到任何東西。

openrowset 有文件大小限制嗎?我正在嘗試編寫一個儲存過程,其中一部分檢查文件中是否存在某些字元,如果存在,我必須跳到儲存過程的下一部分。到目前為止,我只是將整個文件批量插入到一個單列表中,然後做了:

IF(SELECT COUNT(*) FROM #fulltable WHERE fulltable LIKE '%}%')>0 GOTO NEXTSECTION
IF(SELECT COUNT(*) FROM #fulltable WHERE fulltable LIKE '%~%')>0 GOTO NEXTSECTION
IF(SELECT COUNT(*) FROM #fulltable WHERE fulltable LIKE '%#%')>0 GOTO NEXTSECTION

在處理大文件(有時超過 10GB)時,它很可靠,但速度很慢。我認為下面的查詢對於大文件會更快

DECLARE @FILE NVARCHAR(MAX)
select @FILE = BULKCOLUMN from (
select * from openrowset(BULK N'filpath', single_clob) [a]
)a

IF(SELECT IIF(@FILE LIKE '%{%',1,0)) = 1 GOTO NEXTSECTION
IF(SELECT IIF(@FILE LIKE '%}%',1,0)) = 1 GOTO NEXTSECTION
IF(SELECT IIF(@FILE LIKE '%~%',1,0)) = 1 GOTO NEXTSECTION
IF(SELECT IIF(@FILE LIKE '%@%',1,0)) = 1 GOTO NEXTSECTION
IF(SELECT IIF(@FILE LIKE '%£%',1,0)) = 1 GOTO NEXTSECTION

但正如我所說的批量插入是可靠的,如果存在某種文件大小限制,我不想冒著使用 OPENROWSET 時文件被截斷的風險。

任何關於此事的建議將不勝感激。

我不相信 OPENROWSET 有限制,至少我沒有遇到過 - 而且沒有記錄在案,所以回答這個問題,不。

但是,SSMS 是一個 32 位應用程序,所以我認為這將它在 64 位作業系統上的記憶體限制為 4gb - 所以無論你做什麼,你都會受到限制。這並不意味著您可以導入的最大文件為 4gb,但它會使用可用的記憶體通過應用程序將其流式傳輸。

此外,如果您在筆記型電腦/客戶端 SSMS 上執行 OPENROWSET 到遠端伺服器,那也會減慢您的速度。考慮在伺服器上執行 OPENROWSET - 我已經看到通過在伺服器上而不是在客戶端上進行工作來大大提高速度。

來自微軟:-

注意 SSMS 是一個 32 位程序。因此,它被限制為 2 GB 的記憶體。(https://support.microsoft.com/en-za/help/2874903

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