【发布时间】:2015-04-30 07:26:32
【问题描述】:
假设我有这个查询(伪):
Select T.a,
T.b,
(select top 1 element from fn_split(c,',') where element=T.element)
From largeTable T
fn_split 为每一行运行,我想使用值为 udf 的内联表,这样性能会更好。
注意:fn_split 只需通过, 拆分创建一个表:
但是查看内联表值 udf 结构:
create FUNCTION [dbo].[fn_...]
(
...
)
RETURNS table
AS
RETURN SELECT ...(!!!)
它应该立即将 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。
我该怎么做?
【问题讨论】:
标签: sql-server sql-server-2008-r2 inline-table-function