Azure SQL Server - у нас есть такая таблица:
MyTable
ID Source ArticleText
-- ------ -----------
1 100 <nvarchar(max) field with unstructured text from media articles>
2 145 "
3 866 "
4 232 "
ID
столбец является первичным ключом и автоинкрементами на INSERTS
.
Я выполняю этот запрос, чтобы найти записи с наибольшим размером данных в столбце ArticleText
:
SELECT TOP 500
ID, Source, DATALENGTH(ArticleText)/1048576 AS Size_in_MB
FROM
MyTable
ORDER BY
DATALENGTH(ArticleText) DESC
Мы обнаруживаем, что по многим причинам как техническим, так и практическим данные в столбце ArticleText
слишком велики в некоторых записях. Приведенный выше запрос позволяет мне взглянуть на диапазон размеров для наших самых больших записей, которые мне нужно знать для того, что я пытаюсь сформулировать здесь.
Подвиг, который мне нужно совершить, заключается в том, что для всех существующих записей в этой таблице любая запись, у которой ArticleText
DATALENGTH
больше X, разбивает эту запись на X записей, где каждая запись будет содержать одинаковое значение. в столбце Source
, но разбейте данные в столбце ArticleText
на эти записи на более мелкие фрагменты.
Как достичь этого, если говорить точное требование, взять все записи, у которых ArticleText
DATALENGTH
больше 10 МБ, и разбить каждую на 3 записи, в которых значение столбца Source
результирующих записей одинаково для всех 3 записи, но данные ArticleText
разделены на три части.
По сути, нам нужно разделить DATALENGTH
на 3 и применить первые 1/3 текстовых данных к первой записи, 2-ю 1/3 ко 2-й записи и 3-ю 1/3 к третья запись.
Возможно ли это даже в SQL Server?