2013-07-08 4 views
0

У меня есть функция 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 
+1

Ваша функция возвращает таблицу - каково имя столбца таблицы результатов SimpleSplit? Вам не нужно включать это имя столбца в свой оператор select? Используется «OUTER APPLY», но результаты не выбраны. –

+0

Wow ** mr.Reband **. Спасибо за ваш быстрый ответ. Хотелось бы, чтобы вы оставили свой комментарий в качестве ответа, чтобы я мог отметить его как таковой. –

ответ

1

Ваша функция возвращает таблицу - то, что это имя столбца таблицы SimpleSplit результата? Вы должны включить это имя столбца в свой оператор select.

OUTER APPLY прилагается, но результаты не выбраны.

Смежные вопросы