Sör*_*lau 33 sql t-sql sql-server-2005 user-defined-functions
给定一个表值函数,如dbo.Split()
从"T-SQL:对面字符串连接-如何将字符串分割成多个记录",我如何通过多行作为参数?
这有效:
SELECT *
FROM dbo.Split
(',', (SELECT myColumn FROM Stuff WHERE id = 22268))
WHERE ISNULL(s,'') <> ''
Run Code Online (Sandbox Code Playgroud)
它返回:
pn s
----------- -----------
1 22351
2 22354
3 22356
4 22357
5 22360
Run Code Online (Sandbox Code Playgroud)
但这不是:
SELECT *
FROM dbo.Split
(',', (SELECT myColumn FROM Stuff))
WHERE ISNULL(s,'') <> ''
Run Code Online (Sandbox Code Playgroud)
这也不是:
SELECT * FROM dbo.Split_temp(',', myColumn), Stuff
Run Code Online (Sandbox Code Playgroud)
文档说:
当在子查询的FROM子句中调用返回表的用户定义函数时,函数参数不能引用外部查询中的任何列.
我正在寻找的那种结果集看起来像:
id pn s
----------- ----------- -----------
22268 1 22351
22268 2 22354
22268 3 22356
22268 4 22357
22268 5 22360
24104 1 22353
24104 2 22355
24104 3 22356
24104 4 22358
24104 5 22360
24104 6 22362
24104 7 22364
.
.
.
Run Code Online (Sandbox Code Playgroud)
有没有办法(当然,除了光标)来实现这一目标?
(编辑)
根据MarlonRibunal的要求,产生上述结果的样本表如下所示:
id myColumn
----------- -------------------------------------------
22268 22351,22354,22356,22357,22360,
24104 22353,22355,22356,22358,22360,22362,22364,
Run Code Online (Sandbox Code Playgroud)
id
是一个int
; myColumn
是一个varchar(max)
.
Cad*_*oux 52
OUTER APPLY
:
SELECT Stuff.id
,Results.pn
,Results.s
FROM stackoverflow_454945 AS Stuff
OUTER APPLY dbo.Split(',', Stuff.myColumn) AS Results
WHERE ISNULL(Results.s,'') <> ''
Run Code Online (Sandbox Code Playgroud)