我已经定义了一个UDF,它根据我提供的类型将某个字符串拆分成多个子字符串。
ALTER FUNCTION Split (@MainString varchar(100), @Type char)
RETURNS @PartsTable TABLE
(
C1 varchar(10) NULL,
C2 varchar(10) NULL,
C3 varchar(50) NULL,
C4 varchar(10) NULL,
C5 varchar(50) NULL
)
AS
BEGIN
declare @pC1 as varchar(10)
declare @pC2 as varchar(10)
declare @pC3 as varchar(50)
declare @pC4 as varchar(10)
declare @pC5 as varchar(50)
-- cut string into pieces
/*
do some work
*/
-- fill return table
INSERT @PartsTable (C1, C2, C3, C4, C5)
select @pC1, @pC2, @pC3, @pC4, @pC5
RETURN
END
它为我提供了正确的结果集:
C1 C2 C3 C4 C5
--------------------------------------
M.C. NULL Test NULL NULL
(1 row(s) affected)
当我这样称呼时:
SELECT *
FROM dbo.[Split]('Test M.C.', 'X')
如何将其合并到普通的SQL查询中,我正在为表格尝试类似的内容;
SELECT *
FROM MyTable X, dbo.Split(X.ColumnString, X.Type)
但这不起作用。它给我提供了以下错误:
Msg 4121,Level 16,State 1,Line 7
找不到列“dbo”或用户定义的函数或聚合“dbo.SplitsKlantNaam_T1”,或者名称不明确。
有谁知道我应该怎么称呼这个UDF?
提前致谢。
答案 0 :(得分:2)
在这种情况下使用CROSS APPLY
,例如
select *
from MyTable X cross apply dbo.Split(X.ColumnString, X.Type);
答案 1 :(得分:0)
这是因为函数返回是一个表,所以你应该将函数视为表
select * from [dbo].[Split] ('karim pentest')
[dbo].[Split] : is the name of my function