给定一个表值函数,如dbo.Split()
从"T-SQL:对面字符串连接-如何将字符串分割成多个记录",我如何通过多行作为参数?
这有效:
SELECT * FROM dbo.Split (',', (SELECT myColumn FROM Stuff WHERE id = 22268)) WHERE ISNULL(s,'') <> ''
它返回:
pn s ----------- ----------- 1 22351 2 22354 3 22356 4 22357 5 22360
但这不是:
SELECT * FROM dbo.Split (',', (SELECT myColumn FROM Stuff)) WHERE ISNULL(s,'') <> ''
这也不是:
SELECT * FROM dbo.Split_temp(',', myColumn), Stuff
文档说:
当在子查询的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 . . .
有没有办法(当然,除了光标)来实现这一目标?
(编辑)
根据MarlonRibunal的要求,产生上述结果的样本表如下所示:
id myColumn ----------- ------------------------------------------- 22268 22351,22354,22356,22357,22360, 24104 22353,22355,22356,22358,22360,22362,22364,
id
是一个int
; myColumn
是一个varchar(max)
.
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,'') <> ''