Wussten Sie, dass in SQL Server 2016 eine native STRING_SPLIT-Funktion in SQL Server eingebaut wurde? Als Berater sehe ich so viel Code, der eine skalare Funktion aufruft, die verwendet wird, um durch Zeichenketten begrenzte Variablen in eine brauchbare Liste aufzuteilen. Für diejenigen, die diese Methode verwenden, schlage ich vor, dass Sie sich diese Funktion ansehen. STRING_SPLIT ist eine tabellenwertige Funktion, die eine einzelne Spalte mit Ihren String-Werten zurückgibt, die durch das Begrenzungszeichen aufgeteilt sind. Dies ist ein ungewöhnlicher Teil von T-SQL, da für seine Verwendung Kompatibilitätsstufe 130 oder höher erforderlich ist (Microsoft wollte keine brechenden Änderungen in bestehenden Anwendercode einführen). Die Verwendung dieser Methode ist wesentlich effizienter und kann ohne den Aufruf einer skalaren Funktion ausgeführt werden.

Die Syntax

STRING_SPLIT ( string , separator)

Wie man es verwendet

SELECT value AS 'Flavor' FROM STRING_SPLIT('Chocolate,Vanilla,Strawberry', ',');

Ergebnisse

Der Plan

So sieht der Plan aus. Er ist sehr geradlinig und einfach.

Benutzerdefinierte Funktion

Nun ist hier eine hausgemachte Version, die Sie vielleicht in einigen Umgebungen finden. Sie können sehen, dass sie viel weniger effizient ist.

/****** Object: UserDefinedFunction . Script Date: 2/11/2020 6:26:45 PM ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER FUNCTION .( @sInputList VARCHAR(8000) -- List of delimited items , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items) RETURNS @List TABLE (item VARCHAR(8000))BEGINDECLARE @sItem VARCHAR(8000)WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0 BEGIN SELECT @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))), @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList)))) IF LEN(@sItem) > 0 INSERT INTO @List SELECT @sItem ENDIF LEN(@sInputList) > 0 INSERT INTO @List SELECT @sInputList -- Put the last item inRETURNEND

Das Ergebnis

Das Ergebnis ist das gleiche. Aber beachten Sie, dass der Feldname jedes Mal derselbe ist, mit der neuen Funktion erhalten Sie hier ein wenig mehr Flexibilität.

Der Plan

Es ist ein wenig komplizierter als der einfache, den wir oben gesehen haben, einschließlich einer Sequenz.

Es gibt viele verschiedene Möglichkeiten, eine Split-Funktion zu schreiben, um die Dinge zum Laufen zu bringen, aber jetzt, wo SQL Server uns eine gegeben hat, empfehle ich Ihnen dringend, einen Blick auf sie zu werfen. Achten Sie bei der Leistungsoptimierung darauf, was Sie in Ihrem Code schon immer getan haben, und suchen Sie nach Möglichkeiten, es zu verbessern, z. B. auf diese Weise. Sie können mehr erfahren und weitere Beispiele hier auf docs.microsoft.com sehen.

Kontakt zum Autor | Kontakt DCAC

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.