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:
USE tempdb;
GO
CREATE FUNCTION [dbo].[fnSplit]
(
@text nvarchar(max),
@separator char(1) = ','
)
RETURNS @result TABLE
(
item nvarchar(max)
)
AS
BEGIN
DECLARE @i int, @j int;
SET @i = LEN(@text);
SET @j = 1;
WHILE @j > -1
BEGIN
SET @j = CHARINDEX(@separator, @text);
IF @j = 0
BEGIN
INSERT INTO @result VALUES (@text);
BREAK;
END
SET @i = @i - @j;
INSERT INTO @result VALUES (SUBSTRING(@text, 0, @j));
SET @text = RIGHT(@text, @i);
END
RETURN;
END
GO
DECLARE @text nvarchar(max)= 'a,b,c,d';
SELECT * FROM [dbo].[fnSplit](@text, DEFAULT);
/*
item
a
b
c
d
(4 row(s) affected)
*/