1
所以我有一個下表:選擇拆分值
id (int) | val (varchar)
------------------------------------
1 | 4234,15345,1324,1534,1512
2 | 215,22867,2456,24756,2423
3 | 3123,3452,3356,3478,3995
另外,我有一個功能fnSplitString(字符串VARCHAR(最大值),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
不要像逗號分隔的項目(在一列中)存儲數據,它只會導致很多問題。規範化!一個值/行是SQL方式! – jarlh
是的,從我們的客戶導入數據時沒有選擇。感謝您的建議無論如何;] – PacoDePaco
我知道你的意思,必須清理其他人...... – jarlh