Как я могу преобразовать функцию разделения в встроенную табличную udf в SQL-сервере?
Предполагая, что у меня есть этот запрос (псевдо):
Select T.a,
T.b,
(select top 1 element from fn_split(c,',') where element=T.element)
From largeTable T
кудаfn_split
работает для каждой строки, я хотел бы использовать встроенную таблицу со значением udf, так что производительность будет лучше.
NB:fn_split
просто создать таблицу с помощью,
:
Но глядя на встроенную таблицу ценится udfсостав :
create FUNCTION [dbo].[fn_...]
(
...
)
RETURNS table
AS
RETURN SELECT ...(!!!)
Он должен вернуть выбор сразу как первое утверждение!
Но что, если мой UDF выглядит так:
CREATE FUNCTION [dbo].[FN_Split]
(
@InDelimitedString varchar(max),
@InDelimiter varchar(10)
)
RETURNS
@tblArray TABLE
(
ElementID smallint IDENTITY(1,1),
Element varchar(1000)
)
AS
BEGIN
DECLARE @StrPos smallint,
@StrStart smallint,
@DelimiterLength smallint
SET @DelimiterLength = LEN(@InDelimiter)
WHILE LEN(@InDelimitedString) > 0
BEGIN
--Removed for clarity . do some CHARINDEX manipulation ETc.
END
RETURN
END
Вопрос:
Я не могу вернутьсяselect
сразу, но все же, я хочу изменитьfn_split
встроенная таблица оценена в формате udf.
Как мне это сделать ?