从"T-SQL: Opposite to string concatenation - how to split string into multiple records"获得表值函数,如dbo.Split()
,如何传递多行作为参数?在多行上执行表值函数?
这工作:
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
The docs说:
当返回一个表中的用户定义的函数在被调用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)
。
太棒了! 第二个“FROM Stuff”实际上被标记为语法错误,但在删除之后,该语句完全符合我的要求。谢谢。 – 2009-01-18 13:41:39