Очень новое в SQL. У меня есть запрос, который разбивает значение моего столбца на несколько строк. Теперь мне нужно привязать его к реальной таблице, а не только к просмотру через Select Query.
Я прочитал так много решений, и ни одно из них, похоже, не работает. Вся операция «создания функции разделения» записывает все эти сложные переменные, затем создает «временную таблицу», затем «объединяет ее обратно с исходной таблицей со столбцом значений» и так далее меня очень сбивает с толку. Может кто-нибудь, пожалуйста, просто изложите это в плане и в простом формате для меня. Должен быть более простой способ для таких нубов-разработчиков, как я. Пожалуйста, не говорите мне, что я делаю неправильно, и предполагайте, что я знаю, о чем вы говорите (потому что я знаю, что это не работает, я определил, что я не ПРО), может кто-нибудь, пожалуйста, просто покажите мне, что мне нужно сделать, чтобы эта работа работала.
У меня есть выходное представление, которое ТОЧНО то, что я хочу, но это просто представление, оно не обновляет таблицу .. Я просто хочу, чтобы вывод VALUE из моего запроса Split_String вставлялся в мою фактическую таблицу, или даже если я могу просто обновить таблицу, чтобы она выглядела как моя таблица запроса представления, или даже как я создаю новую таблицу из моего запроса, чтобы АКТУАЛЬНЫЙ таблица выглядит как мой запрос, а не просто представление, это было бы здорово!
ПРИМЕР ТАБЛИЦЫ из 1 строки
обратите внимание, что это только пример и в фактической таблице более 120 столбцов, и разделение строки [DOS File] не является моей проблемой (я сделал это с помощью моего запроса, который разбивается на разделитель и вставляется в несколько строк и дублирует все другие столбцы aro und it), моя проблема заключается в попытке зафиксировать столбец значений, созданный запросом split_string, в фактическую таблицу, чтобы я мог выполнять другие преобразования данных на нем, что требует, чтобы строка была разделена на разделитель
Имя Столбца 1 = Файл DOS
Значение Столбца 1 = example1.do c | example2.do c | example3.do c | example4.do c | example5.do c | example6.do c | example7.do c
Имя столбца 2 = ИМЯ
Значение столбца 2 = Салли Эндрюс
Имя столбца 3 = АДРЕС
Значение Column3 = 42 Wallaby Way, Syndey
Имя Column4 = НОМЕР ТЕЛЕФОНА
Значение Column4 = 123-123
Мой запрос Split_String, который имеет [Выходной столбец] моего запроса Split_String, прикрепленный ко всем другим столбцам в указанной таблице:
select value as [New DOS file], [Document Export Edit].*
from [Document Export Edit]
cross apply string_split([DOS file], '|')
Столбец [DOS file]
является МАССИВНЫМ .csv style string
, и поэтому разделителем будет '|'
.
Методы, которые у меня есть пытался использовать:
Update [Document Export Edit]
set [New DOS File] = (select value
from [Document Export Edit]
cross apply string_split([DOS file], '|'))
GO
Со следующим сообщением об ошибке:
Недопустимое имя столбца 'Новый файл DOS '.
и это:
Update [Document Export Edit]
set [New DOS File] = replace([New DOS File],[New DOS File],
select value from [Document Export Edit]
cross apply string_split([DOS file], '|'))
Со следующим сообщением об ошибке:
Неверное имя столбца «Новый файл DOS».
и t his:
Alter Table [Document Export Edit]
Add [New DOS File] NVARCHAR(max) null
Add [Test] NVARCHAR(max) null
GO
Update [Document Export Edit]
set [New DOS File] = id1,
[Test] = id2
from (
select [DOS File],
(select top 1 value as val
from string_split([DOS File], '|')
order by (row_number() over(order by 1 asc)) asc
) as id1,
(select top 1 value as val
from string_split([DOS File], '|')
order by (row_number() over(order by 1 asc)) desc
) as id2
from [Document Export Edit]
) A inner join [Document Export Edit] B
on A.[DOS File] = B.[DOS File]
со следующим сообщением об ошибке:
Оконные функции, агрегаты и СЛЕДУЮЩЕЕ ЗНАЧЕНИЕ ДЛЯ функций не поддерживают целочисленные индексы как выражения предложения ORDER BY.
Итак, я попробовал это:
Update [Document Export Edit]
set [New DOS File] = id1
from (
select [DOS File],
(select top 1 value as val
from string_split([DOS File], '|')
) as id1
from [Document Export Edit]
) A inner join [Document Export Edit] B
on A.[DOS File] = B.[DOS File]
Результат :
Это сработало, но он просто разделил первый экземпляр разделителя, продублировал то же самое в другом столбце и просто проигнорировал остальную часть строки. ТАК БЛИЗКО!!! Я просто хочу, чтобы он делал то, что он делал в первом бите, и делал это для остальной части строки, но помещал его в разные строки PER DELIMITER INSTANCE !!
, поэтому пошел попробовать это:
Update [Document Export Edit]
set [New DOS File] = id1
from (
select [DOS File],
(select top 1 value as val
from [Document Export Edit]
cross apply string_split([DOS File], '|')
) as id1
from [Document Export Edit]
) A inner join [Document Export Edit] B
on A.[DOS File] = B.[DOS File]
Результат:
Затем было выпущено, что весь [New DOS file]
столбец только что воспроизвел первый результат. Вернулся и посмотрел на свой синтаксис, а затем понял, что я наложил ограничение переменной только на первый экземпляр ... мой плохой . Итак, я пошел и изменил его.
Затем я попробовал это:
Update [Document Export Edit]
set [New DOS File] = id1
from (
select [DOS File],
(select value as val
from [Document Export Edit]
cross apply string_split([DOS File], '|')
) as id1
from [Document Export Edit]
) A inner join [Document Export Edit] B
on A.[DOS File] = B.[DOS File]
со следующим сообщением об ошибке:
Подзапрос вернул более одного значения. Это не разрешено, если подзапрос следует за =,! =, <, <=,>,> = Или когда подзапрос используется как выражение.
Таким образом, похоже, что этот конкретный запрос может только делайте по одной переменной за раз, а не по нескольку строк одновременно.
Вот некоторые из ссылок, по которым я пытался перейти, но которые либо не справились с моей задачей, либо были слишком сложны для меня:
Преобразование строки, разделенной запятыми, в отдельные строки
Разделение значений с разделителями в столбце SQL на несколько строк
Разделение данных столбца на несколько строк
Разделение значений на несколько строк
Обновление нескольких строк на SQL сервере с помощью предложения IN
Разделить строку на несколько строк с несколькими столбцами в паре
https://www.emoreau.com/Entries/Articles/2019/04/Splitting-a-value-into-multiple-rows-in-Microsoft-SQL-Server.aspx
Надеюсь, этой информации достаточно для кто-нибудь, пожалуйста, помогите мне. Спасибо.