Ich habe in Microsoft SQL Server 2008 eine Tabellenwertfunktion geschrieben, um eine durch Kommas getrennte Spalte in einer Datenbank zu verwenden und für jeden Wert separate Zeilen auszuspucken.
Beispiel: "eins, zwei, drei, vier" würde eine neue Tabelle mit nur einer Spalte zurückgeben, die die folgenden Werte enthält:
one
two
three
four
Sieht dieser Code für euch fehleranfällig aus? Wenn ich es mit teste
SELECT * FROM utvf_Split('one,two,three,four',',')
es läuft nur für immer und gibt nie etwas zurück. Dies wird wirklich entmutigend, zumal es auf dem MSSQL-Server keine integrierten Split-Funktionen gibt (WARUM WARUM WARUM?!) Und alle ähnlichen Funktionen, die ich im Web gefunden habe, absoluter Papierkorb sind oder für das, was ich versuche, einfach irrelevant sind .
Hier ist die Funktion:
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