Hasznos funkció: fnSplit
Sajnos nem minden cég használ legfrissebb verziót egy-egy programból, vagy csak simán egy másik rendszerből érkező adatok nem tudnak olyan funkciókat, amit pl. az SQL Server tud. Ilyen például a TVP – Table Value Parameter.
Képzeljük el az az esetet, amikor TVP helyett egy listát kapunk, pl: a,b,c,d. Ahhoz, hogy ezt tábla formában kapjuk meg, az alábbi megoldást szoktam alkalmazni:
1USE tempdb;
2GO
3
4CREATE FUNCTION [dbo].[fnSplit]
5(
6 @text nvarchar(max),
7 @separator char(1) = ','
8)
9RETURNS @result TABLE
10(
11 item nvarchar(max)
12)
13AS
14BEGIN
15 DECLARE @i int, @j int;
16 SET @i = LEN(@text);
17 SET @j = 1;
18
19 WHILE @j > -1
20 BEGIN
21 SET @j = CHARINDEX(@separator, @text);
22 IF @j = 0
23 BEGIN
24 INSERT INTO @result VALUES (@text);
25 BREAK;
26 END
27 SET @i = @i - @j;
28 INSERT INTO @result VALUES (SUBSTRING(@text, 0, @j));
29 SET @text = RIGHT(@text, @i);
30 END
31 RETURN;
32END
33GO
34
35DECLARE @text nvarchar(max)= 'a,b,c,d';
36SELECT * FROM [dbo].[fnSplit](@text, DEFAULT);
37
38/*
39item
40a
41b
42c
43d
44
45(4 row(s) affected)
46*/