Добрый день, Ди,
OPENROWSET не ограничивается 8000 символов. Пожалуйста, проверьте эту цитату особенно часть, которую я выделил жирным шрифтом:
"OPENROWSET (BULK ...) предполагает, что, , если не указано , максимальная длина данных SQLCHAR, SQLNCHAR или SQLBINARY не превышает 8000 байтов."
Когда вы используете OPENROWSET для данных из таблицы SQL Server с помощью поставщика SQLNCLI, вы можете использовать его непосредственно для таблиц с типом столбца MAX.
Когда вы используете внешний файл для данных, тогда решение состоит в том, чтобы просто использовать файл формата, который определяет длину столбца для MAX.
К сожалению, я не уверен, как это работает с Oracle, так как я не проверял это.
Вот полный пример использования SQL Server в качестве источника с использованием столбца MAX
use tempdb
GO
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
DROP TABLE IF EXISTS T
GO
CREATE TABLE T (MaxText NVARCHAR(MAX))
GO
TRUNCATE TABLE T;
INSERT T(MaxText) VALUES ('Ronen')
GO
DECLARE @T NVARCHAR(MAX) =
CONVERT(NVARCHAR(MAX),'')
+ REPLICATE(N'Ronen', 1600) -- 8k
+ REPLICATE(N'Ronen', 1600) -- 8k
+ REPLICATE(N'Ronen', 1600) -- 8k
INSERT T(MaxText) VALUES (@T)
GO
SELECT DATALENGTH(MaxText) -- 24000
FROM tempdb.dbo.T
GO
SELECT DATALENGTH(MaxText)
FROM OPENROWSET(
'SQLNCLI',
'Server=LectureVM\SQL2019;Trusted_Connection=yes;',
'SELECT MaxText FROM tempdb.dbo.T') AS a;
GO -- 24000 returned from the OPENROWSET
SELECT * INTO #TMP001
FROM OPENROWSET(
'SQLNCLI',
'Server=LectureVM\SQL2019;Trusted_Connection=yes;',
'SELECT MaxText FROM tempdb.dbo.T') AS a;
-- (2 rows affected)
SELECT DATALENGTH(MaxText) FROM #TMP001
GO -- 24000
Если это не работает в Oracle, тогда:
Вы можете использовать SINGLE_CLOB или SINGLE_NCLOB, которые будут возвращать данные как одно значение, длина MAX, а затем вы можете анализировать данные
Вариант 2 - экспорт в csv, и, как я объяснил выше, вы можете импортировать, используя bcp или OPENROWSET, используя файл формата
Дополнительно проверьте эту ветку на MSDN о том, как tio использует связанный сервер