所以我有一张下表:
id (int) | val (varchar)
------------------------------------
1 | 4234,15345,1324,1534,1512
2 | 215,22867,2456,24756,2423
3 | 3123,3452,3356,3478,3995
另外,我有一个函数fnSplitString(string varchar(max),deliminator char(1)),它的工作原理如下:
SELECT * FROM fnSplitString ((SELECT val FROM idval WHERE id = 1),',')
产生输出:
val (varchar)
------------
4234
15345
1324
1534
1512
我的目标是制作一个这样的表:
id (int) val (varchar)
------------
1 4234
1 15345
1 1324
1 1534
1 1512
2 215
2 22867
2 2456
...
我知道如何使用游标实现它并插入临时表。我只是好奇,如果没有光标可以这样做吗?我们假设我不想首先修改fnSplitString函数。到目前为止,我已经提出了查询的一部分:
SELECT id, spl.val
FROM idval JOIN
(SELECT * FROM fnSplitString ((SELECT val FROM idval WHERE id = 1),',')) spl
ON 1=1
WHERE id = 1
只有id = 1的行才能得到结果表。
答案 0 :(得分:3)
您必须使用CROSS APPLY
:
SELECT *
FROM idval i
CROSS APPLY dbo.fnSplitString(i.val, ',') f