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:

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)
*/

Add comment