У меня есть функция Transact SQL SimpleSplit
, которая разбивает строку в соответствии с разделителем. Я могу использовать его следующим образом:Применить SQL-функцию к значениям столбца таблицы
DECLARE @DelimitedString NVARCHAR(128)
SET @DelimitedString = 'Processor,RAM,SSD,Ethernet'
SELECT * FROM [dbo].[SimpleSplit](@DelimitedString, ',')
Это приводит к:
Processor
RAM
SSD
Ethernet
Как и следовало ожидать.
Теперь у меня есть таблица под названием PROD_TABLE
с колонкой Descr
. Я хотел бы применить эту функцию к каждому значению в столбце Descr
. Я попытался следующие, и он не работает:
SELECT p.[ID], p.[Descr]
FROM [Amazon].[dbo].[PROD_TABLE] p
OUTER APPLY [dbo].[SimpleSplit](p.Descr, '-') d
В выходе я только увидеть ID
и Descr
столбцов, т.е. без каких-либо результатов от функции SimpleSplit
. Однако, если я пытаюсь
SELECT *
FROM [Amazon].[dbo].[PROD_TABLE] p
OUTER APPLY [dbo].[SimpleSplit](p.Descr, '-') d
Я вижу результаты функции SimpleSplit
в последней колонке. Почему этот запрос применяет эту функцию, но предыдущий запрос не работает?
Ответ
Благодаря mr.Rebands ответ ниже, я понял, что мне нужно было назвать результаты. Следовательно * работал, но явно назвать столбцы мне нужно сделать что-то вроде:
SELECT p.[ID], p.[Descr], d.[Data]
FROM [Amazon].[dbo].[PROD_TABLE] p
OUTER APPLY [dbo].[SimpleSplit](p.[Descr], '-') d
Ваша функция возвращает таблицу - каково имя столбца таблицы результатов SimpleSplit? Вам не нужно включать это имя столбца в свой оператор select? Используется «OUTER APPLY», но результаты не выбраны. –
Wow ** mr.Reband **. Спасибо за ваш быстрый ответ. Хотелось бы, чтобы вы оставили свой комментарий в качестве ответа, чтобы я мог отметить его как таковой. –