Szukaj…


Połącz wiersze tabeli z dynamicznie generowanymi wierszami z komórki

CROSS APPLY umożliwia „łączenie” wierszy z tabeli z dynamicznie generowanymi wierszami zwracanymi przez niektóre funkcje wartości tabeli.

Wyobraź sobie, że masz tabelę firmową z kolumną zawierającą tablicę produktów (kolumna ProductList) oraz funkcję, która analizuje te wartości i zwraca zestaw produktów. Możesz wybrać wszystkie wiersze z tabeli firmowej, zastosować tę funkcję w kolumnie ProductList i „połączyć” wygenerowane wyniki z macierzystym wierszem firmy:

SELECT *
FROM Companies c 
     CROSS APPLY dbo.GetProductList( c.ProductList ) p

Dla każdego wiersza wartość funkcji ProductList zostanie przekazana do funkcji, a funkcja zwróci te produkty jako zestaw wierszy, które można połączyć z wierszem nadrzędnym.

Połącz wiersze tabeli z tablicą JSON przechowywaną w komórce

CROSS APPLY umożliwia „łączenie” wierszy z tabeli z kolekcją obiektów JSON przechowywanych w kolumnie.

Wyobraź sobie, że masz tabelę firmową z kolumną zawierającą tablicę produktów (kolumna ProductList) sformatowaną jako tablica JSON. Funkcja wartości tabeli OPENJSON może analizować te wartości i zwracać zestaw produktów. Możesz wybrać wszystkie wiersze z tabeli firmowej, przeanalizować produkty JSON za pomocą OPENJSON i „połączyć” wygenerowane wyniki z macierzystym wierszem firmy:

SELECT *
FROM Companies c 
     CROSS APPLY OPENJSON( c.ProductList )
                 WITH ( Id int, Title nvarchar(30), Price money)

Dla każdego wiersza wartość komórki ProductList zostanie przekazana do funkcji OPENJSON, która przekształci obiekty JSON w wiersze o schemacie zdefiniowanym w klauzuli WITH.

Filtruj wiersze według wartości tablic

Jeśli przechowujesz listę znaczników w wierszu jako wartości oddzielone przecinkami, funkcja STRING_SPLIT umożliwia przekształcenie listy znaczników w tabelę wartości. CROSS APPLY umożliwia „łączenie” wartości analizowanych przez funkcję STRING_SPLIT z wierszem nadrzędnym.

Wyobraź sobie, że masz tabelę produktów z kolumną zawierającą tablicę tagów oddzielonych przecinkami (np. Promocja, wyprzedaż, nowe). STRING_SPLIT i CROSS APPLY umożliwiają łączenie wierszy produktów za pomocą ich tagów, dzięki czemu można filtrować produkty według tagów:

SELECT *
FROM Products p 
     CROSS APPLY STRING_SPLIT( p.Tags, ',' ) tags
WHERE tags.value = 'promo'

Dla każdego wiersza wartość komórki Tagi zostanie przekazana do funkcji STRING_SPLIT, która zwróci wartości tagu. Następnie możesz filtrować wiersze według tych wartości.

Uwaga: funkcja STRING_SPLIT nie jest dostępna przed SQL Server 2016



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow