Microsoft SQL Server
Kreuz anwenden
Suche…
Verbinden Sie Tabellenzeilen mit dynamisch generierten Zeilen aus einer Zelle
Mit CROSS APPLY können Sie Zeilen aus einer Tabelle "verbinden", wobei dynamisch generierte Zeilen von einer Tabellenwertfunktion zurückgegeben werden.
Stellen Sie sich vor, Sie haben eine Firmentabelle mit einer Spalte, die ein Array von Produkten (Spalte ProductList) enthält, und eine Funktion, die diese Werte analysiert und einen Satz von Produkten zurückgibt. Sie können alle Zeilen aus einer Company-Tabelle auswählen, diese Funktion auf eine ProductList-Spalte anwenden und die erzeugten Ergebnisse mit der übergeordneten Company-Zeile "verbinden":
SELECT *
FROM Companies c
CROSS APPLY dbo.GetProductList( c.ProductList ) p
Für jede Zeile wird der Funktion ein Wert der ProductList- Zelle bereitgestellt, und die Funktion gibt diese Produkte als eine Reihe von Zeilen zurück, die mit der übergeordneten Zeile verbunden werden können.
Verbinden Sie Tabellenzeilen mit einem in Zelle gespeicherten JSON-Array
Mit CROSS APPLY können Sie Zeilen aus einer Tabelle mit einer Sammlung von JSON-Objekten verbinden, die in einer Spalte gespeichert sind.
Stellen Sie sich vor, Sie haben eine Firmentabelle mit einer Spalte, die ein Array von Produkten (Spalte ProductList) enthält, die als JSON-Array formatiert sind. Die Tabellenwertfunktion OPENJSON kann diese Werte analysieren und die Menge der Produkte zurückgeben. Sie können alle Zeilen aus einer Company-Tabelle auswählen, JSON-Produkte mit OPENJSON analysieren und generierte Ergebnisse mit der übergeordneten Company-Zeile "verknüpfen":
SELECT *
FROM Companies c
CROSS APPLY OPENJSON( c.ProductList )
WITH ( Id int, Title nvarchar(30), Price money)
Für jede Zeile wird der Wert der ProductList- Zelle an die OPENJSON-Funktion übergeben, die JSON-Objekte in Zeilen mit dem in WITH-Klausel definierten Schema umwandelt.
Zeilen nach Arraywerten filtern
Wenn Sie eine Liste von Tags in einer Zeile als durch Komma getrennte Werte speichern , können Sie mit der Funktion STRING_SPLIT die Liste der Tags in eine Wertetabelle umwandeln. Mit CROSS APPLY können Sie von der STRING_SPLIT- Funktion analysierte Werte mit einer übergeordneten Zeile " verknüpfen ".
Stellen Sie sich vor, Sie haben eine Produkttabelle mit einer Spalte, die ein Array mit durch Kommas getrennten Tags enthält (z. B. Promo, Vertrieb, neu). Mit STRING_SPLIT und CROSS APPLY können Sie Produktzeilen mit ihren Tags verknüpfen, sodass Sie Produkte nach Tags filtern können:
SELECT *
FROM Products p
CROSS APPLY STRING_SPLIT( p.Tags, ',' ) tags
WHERE tags.value = 'promo'
Für jede Zeile wird der Wert der Zelle Tags an die Funktion STRING_SPLIT übergeben, die die Tag-Werte zurückgibt. Dann können Sie Zeilen nach diesen Werten filtern.
Hinweis: Die STRING_SPLIT- Funktion ist erst ab SQL Server 2016 verfügbar