Вы не упоминаете, что планируете делать с данными после их получения.Поскольку у вас есть только права на чтение, вы не можете сохранить его в таблице.Что-то, о чем вы, возможно, и не задумывались, - это создать локальную базу данных, в которой у вас есть права на запись, и выполнять свою работу там.Самый простой способ - получить копию базы данных, но вы также можете получить доступ к базе данных только для чтения, используя полные имена.
Что касается ваших потребностей разделения строк, я могу указать вам отличный способ разделения.струны, созданные джентльменом по имени Джефф Моден.Вы можете найти статью, обсуждающую это, а также ссылку на код здесь:
Tally OH!Улучшенная функция CSV Splitter для SQL 8K
Несмотря на то, что это очень информативное чтение, поскольку оно посвящено тестированию производительности и тому подобное, вы можете пропустить большую часть этого и сразу перейти ккод, но попробуйте выбрать материал, который обсуждает функциональность и прочитайте его, потому что код в лучшем случае покажет непосвященных как нетрадиционные.
Код создает функцию, но у вас нет разрешения делать это.придется удалить мясо из функции и использовать его напрямую.
Я постараюсь дать небольшой обзор подхода, с которого можно начать.
Суть подхода - этоTally Table.Если вы не знакомы с этим термином (он также называется таблицей чисел), это, в основном, таблица, в которой каждая строка содержит целое число, а строки - это набор всех целых чисел в некотором диапазоне, обычно довольно больших.Так как Tally Table помогает разбивать строки?Волшебство происходит, соединяя таблицу подсчета с таблицей, содержащей строки, которые нужно разделить, и используя предложение where для идентификации разделителей, просматривая 1-символьные подстроки, проиндексированные по номерам таблицы подсчета.Затем естественные операции на основе множеств SQL Server осуществляют поиск всех разделителей за один раз, а ваш список выбора затем извлекает подстроки, заключенные в скобки.Это действительно довольно умно и очень быстро.
Когда вы попадаете в код, первая часть функции может выглядеть очень странно (потому что это так), но это необходимо, поскольку у вас есть только права на чтение.В основном он использует функциональность Common Table Expression (CTE) SQL Server для создания внутренней подсчетной таблицы на лету, используя некрасивую логику, которую вам на самом деле не нужно понимать (но если вы хотите разобраться, это умно, даже если этонекрасиво).Поскольку таблица является только локальной для запроса, она не будет нарушать ваши разрешения только для чтения.
Она также использует CTE для представления начального индекса и длины подстрок с разделителями, поэтому окончательный запрос довольно прост, получая строки сномер строки, за которым следует строка, отделенная от исходных данных.
Надеюсь, это поможет вам в вашей задаче - это действительно хороший инструмент для использования в вашем наборе инструментов.
Редактировать: Iтолько что понял, что вы хотите, чтобы ваш вывод был в отдельных столбцах, а не в строках.Это немного сложнее, так как каждый столбец, который вы разделяете, может создать различное количество строк, а также, ваши столбцы будут нуждаться в именах.Если вы уже знаете имена столбцов и знаете количество выходных строк, это будет проще, но все же сложно.Данные строки из разделителя могут быть изменены для предоставления идентификатора строки, из которой были получены данные, и номеров строк, которые могут помочь в создании произвольных имен столбцов, если они вам нужны, но большая проблема заключается в том, что при наличии только прав на чтение вы найдете обработкувсе пошагово, довольно сложно - CTE могут быть использованы для этого еще дальше, но ваш код, скорее всего, будет довольно запутанным, если требования не будут достаточно простыми.