Napisałem funkcję cenioną w tabeli w Microsoft SQL Server 2008, aby wziąć kolumnę rozdzielaną przecinkami w bazie danych i wypluć osobne wiersze dla każdej wartości.
Przykład: „jeden, dwa, trzy, cztery” zwróci nową tabelę z tylko jedną kolumną zawierającą następujące wartości:
one
two
three
four
Czy ten kod wygląda na podatny na błędy? Kiedy to testuję
SELECT * FROM utvf_Split('one,two,three,four',',')
po prostu działa wiecznie i nigdy nic nie zwraca. Jest to naprawdę rozczarowujące, zwłaszcza, że nie ma wbudowanych funkcji podziału na serwerze MSSQL (DLACZEGO DLACZEGO ?!) i wszystkie podobne funkcje, które znalazłem w sieci, są absolutnym śmieciem lub po prostu nie mają znaczenia dla tego, co próbuję zrobić .
Oto funkcja:
USE *myDBname*
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR)
RETURNS @SplitValues TABLE
(
Asset_ID VARCHAR(MAX) NOT NULL
)
AS
BEGIN
DECLARE @FoundIndex INT
DECLARE @ReturnValue VARCHAR(MAX)
SET @FoundIndex = CHARINDEX(@delimiter, @String)
WHILE (@FoundIndex <> 0)
BEGIN
DECLARE @NextFoundIndex INT
SET @NextFoundIndex = CHARINDEX(@delimiter, @String, @FoundIndex+1)
SET @ReturnValue = SUBSTRING(@String, @FoundIndex,@NextFoundIndex-@FoundIndex)
SET @FoundIndex = CHARINDEX(@delimiter, @String)
INSERT @SplitValues (Asset_ID) VALUES (@ReturnValue)
END
RETURN
END